You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 15:26:19