我试图在客户端使用WCF使用RESTful JSON Web服务。该服务是第三方,所以我无法对服务器响应进行任何更改。WCF中的单元素数组RESTful JSON Web服务客户端
服务器发回看起来像这样的时候,只有一个数据点的响应...
单个数据点
{
"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允许单个元素数组不包含括号,然后告诉我的服务使用该序列化器?也许服务行为或什么?
任何方向都会有所帮助。
你可以尝试使用Javascript反序列化器而不是Datacontractjsonserializer。另请参考以下链接:http://stackoverflow.com/questions/596271/deserialization-problem-with-datacontractjsonserializer – Rajesh
您也可以通过这个好文章,关于你如何使用序列化反序列化JSON字符串解释说:HTTP ://www.codeproject.com/Articles/272335/JSON-Serialization-and-Deserialization-in-ASP-NET – Rajesh
@Rajesh,你知道的一种方式来注入的JavaScript解串器到WCF管道到位DataContractJsonSerializer的? – TylerOhlsen