WCF服务无法反序列化含可变键名的JSON数组问题求助
WCF服务反序列化可变键名的
serial_numbers字段失败 我创建了一个WCF服务,可接收如下示例JSON数据:
{ "type": "despatch", "client_ref": "ORD00001", "date_despatched": "2015-01-01T17:27:38+00:00", "postage_method": "Royal Mail 1st Class Packet", "tracking_number": "GB1010101010A", "items": [ { "client_ref": "ABC123", "quantity": 1, "serial_numbers": { "ABC123": [ "SERIAL0001" ] } } ] }
反序列化serial_numbers元素时出现问题:该元素内的数组键名是可变的,会随items中的每个条目变化。服务运行正常,但反序列化后serial_numbers数据为空。
以下是操作契约定义:
[OperationContract(Name = "JAJTracking")] [WebInvoke(Method = "POST", UriTemplate = "JAJTracking?W={W}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] JANDJResponse ProcessTracking(string W, JAndJDespatch jjdesp);
我尝试用Dictionary存储serial_numbers数据,这是搜索到的可行方案:
public class JAndJDespatch { [DataMember] public string type { get; set; } [DataMember] public string client_ref { get; set; } [DataMember] public string date_despatched { get; set; } [DataMember] public string postage_method { get; set; } [DataMember] public string tracking_number { get; set; } [DataMember] public List<JAndJDespatchItems> items { get; set; } } public class JAndJDespatchItems { [DataMember] public object UsedForKnownTypeSerializationObject; [DataMember] public string client_ref { get; set; } [DataMember] public Int32 quantity { get; set; } [JsonExtensionData] public Dictionary<string, object> serial_numbers { get; set; } }
若在ProcessTracking方法中硬编码JSON字符串并运行,反序列化可正常完成,能访问serial_numbers数据;但通过WCF服务传递JSON时,其余数据可正常反序列化,仅serial_numbers数据丢失。
请问:
- 我是否存在明显错误?
- 或是WCF服务无法反序列化此类JSON数据?
- 若无法通过WCF实现,该如何解决?
内容的提问来源于stack exchange,提问作者kbbucks
相关产品推荐
相关产品推荐

