我正在尝试在客户端使用 WCF 使用 RESTful JSON Web 服务。该服务是第 3 方,因此我无法对服务器响应进行任何更改。
当只有一个数据点时,服务器正在发回一个看起来像这样的响应......
单个数据点
{
"Data":
{
"MyPropertyA":"Value1",
"MyPropertyB":"Value2"
},
}
当有多个数据点时会出现类似的情况......
多个数据点
{
"Data":
[
{
"MyPropertyA":"Value1",
"MyPropertyB":"Value2"
},
{
"MyPropertyA":"Value3",
"MyPropertyB":"Value4"
},
{
"MyPropertyA":"Value5",
"MyPropertyB":"Value6"
}
],
}
我的服务合同是这样设置的...
[ServiceContract]
public interface IRewardStreamService
{
[OperationContract]
[WebInvoke]
MyResponse GetMyStuff();
}
和这样的数据点的数据合同......
[DataContract]
public class MyData
{
[DataMember]
public string MyPropertyA { get; set; }
[DataMember]
public string MyPropertyB { get; set; }
}
我可以让单个数据点响应工作的唯一方法是如果我有一个像这样的单个实例属性,但这不会解析多个数据点响应......
单例响应
[DataContract]
public class MyResponse
{
[DataMember]
public MyData Data { get; set; }
}
我可以让多个数据点响应工作的唯一方法是如果我有一个这样的数组/列表实例属性,但这不会解析单个数据点响应......
多实例响应
[DataContract]
public class MyResponse
{
[DataMember]
public IList<MyData> Data { get; set; }
}
我理解问题在于,当只返回一个数据点时,响应会省略括号,但 WCF 似乎不能很好地反序列化该语法。有什么方法可以告诉 DataContractJsonSerializer 允许单元素数组不包含括号,然后告诉我的服务使用该序列化程序?也许是服务行为或什么?
任何方向都会有所帮助。