1

在写这个问题的标题时,我碰巧看到了这个答案。但是我正在寻找一种在 WCF 客户端中执行此操作的方法。有没有办法将 JSON.Net 插入 WCF 客户端?

雅虎!几天前刚刚更改了PlaceFinder服务。一个变化是响应不再包含Results节点,而是现在包含Result节点。另一个变化是有时此节点包含结果对象数组(当有 2 个或更多结果时),有时它包含单个结果对象(当只有 1 个结果时)。

有没有办法使用 WCFDataMemberAttribute来反序列化这种结构,同时适应这两种情况?

[DataContract]
public class PlaceFinderResultSet : IEnumerable<PlaceFinderResult>
{
    // this works for 1 result, but fails when it is an array
    [DataMember(Name = "Result")]
    public PlaceFinderResult Result { get; set; }

    // this works for an array of results, but fails when it is a single
    [DataMember(Name = "Result")]
    public List<PlaceFinderResult> { get; set; }

    // note I do not use these together at the same time, but comment one out
    // at a time. Other members in this class work as expected and are omitted
}

以下是在 Fiddler2 中看到的 2 个示例响应(同样,结果的某些部分被省略了):

JSON (here is a response with 1 result)
|--ResultSet
|--|--Found=1
|--|--Quality=37
|--|--Result
|--|--|city=city name
|--|--|country=country name
|--|--|otherprops=other values

JSON (here is a response with many results)
|--ResultSet
|--|--Found=2
|--|--Quality=40
|--|--Result
|--|--|{}
|--|--|--|city=city name1
|--|--|--|country=country name1
|--|--|--|otherprops=other values1
|--|--|{}
|--|--|--|city=city name2
|--|--|--|country=country name2
|--|--|--|otherprops=other values2
4

0 回答 0