【问题标题】:Parse JSON named array using C# DataContractJsonSerializer使用 C# DataContractJsonSerializer 解析 JSON 命名数组
【发布时间】:2015-04-17 05:01:10
【问题描述】:

如何使用 DataContractJsonSerializer 解析没有修复名称的 JSON 数组?假设一个 JSON 结构是这样的:

{
 "SUMMARY":
 {
    "0123":
    [
    {
       "Type": "Type_A",
       "Duration": 100
    }
    ]
 }
}

在 C# 中,我可以如下初始化两个数据对象,以使用 DataContractJsonSerializer 解析它们,如下所示:

[DataContract]
public class numberedStruct {

    [DataMember(Name = "Type")]
    public string Type {get; set;}

    [DataMember(Name = "Duration")]
    public int Duration{get; set;}
}

[DataContract]
public class summaryStruct {

    [DataMember(Name = "0123")]
    public numberedStruct[] s;

}

但是,如果“0123”也是一个变量并且可以是其他变量怎么办?所以我无法将 DataMember 名称固定为“0123”。

如何获取“0123”作为变量以及 C# 结构中的内容?

【问题讨论】:

  • 视情况而定,结构相同,结构中的位置对于“0123”总是相同的?
  • c#中变量名不能为数字。
  • 感谢您的 cmets。 “0123”只是一个例子。实际上它不是变量的名称,而是实际情况下变量的值,所以它可以是“abcd”或“defg”。我不确定如何解析这种类型的结构,因为它没有静态变量名。

标签: c# arrays json serialization datamember


【解决方案1】:

您可以尝试使用[JsonExtensionData] 将您奇怪的变量名称放入字典中

[JsonExtensionData]
public Dictionary<string, object> strangeVariables { get; set; } 

这将放在 Response 对象中。

【讨论】:

  • 您好 ANewGuylnTown,感谢您的建议。能否请您详细给我代码。我尝试了下面的结构,但它仍然为我返回一个空值。 [DataContract] public class summaryStruct { [JsonExtensionData] public IDictionary s; }
  • 非常感谢。它不工作。我还必须使用 Newtonsoft.Json.JsonConvert 中提供的序列化/反序列化功能才能获得它。使用 .NET 默认的 DataContractJsonSerializer 将不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多