我試圖在客戶端使用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