【问题标题】:Parse JSON into C# object with "0" as object name inside JSON string将 JSON 解析为 C# 对象,其中 JSON 字符串中的对象名称为“0”
【发布时间】:2014-03-31 17:00:59
【问题描述】:

我收到一个 JSON 对象以使用 MVC4 启动 Web 会话。我需要将其解析为 C# 对象以供以后使用。我无法更改我收到的对象 - 它来自第三方。

我用来解析的方法:

MyClass jsonObject = new MyClass();

//The 2 lines below will not work with the given answer
//JavaScriptSerializer serializer = new JavaScriptSerializer();
//jsonObject = serializer.Deserialize<MyClass >(jsonString);

//Use this method instead
jsonObject = JsonConvert.DeserializeObject<MyClass>(jsonString);

问题: 由于内部对象的“0”名称,我无法为 JSON 的这一部分定义 C# 类。

JSON:

{
    "header": {
        "to": {
            "data": [],
            "0": {
                "data": [],
                "value": "1101",
                "domain": "DUNS"
            }
        },
        "from": {
            "data": [],
            "0": {
                "data": [],
                "value": "1101",
                "domain": "NetworkID"
            }
        },
        "sender": {
            "data": {
                "UserAgent": "Test Client v1"
            },
            "0": {
                "data": {
                    "SharedSecret": "test"
                },
                "value": "testing@smith.com",
                "domain": "testClientID"
            }
        }
    },
...
}

注意:我已经尝试过在线 json 到 C# 类生成器,要么失败,要么创建一个名称为“0”的类,这当然无法编译。

评论: MyClass 是这样的:

public class Header
{
    public ToClass to = new ToClass ();
    public FromClass to = new FromClass ();
}

public class ToClass 
{
    public Data[];
    public zero 0 = new zero();
}

public class zero
{
    public string data { get; set; }
    public string value { get; set; }
    public string domain { get; set; }
}

【问题讨论】:

  • 您是否尝试过使用 Json.NET 将其解析为 JObject?
  • 在这种情况下你想让它做什么? MyClass 长什么样子?
  • 数据有点奇怪。 sender 中的“0”.data 属性似乎不是数组类型,而在 to 和 from 中却是。解决 PropertyName 问题后,您可能会遇到一些麻烦。
  • @AndrewWhitaker 使用 MyClass 编辑 - 我需要一个 C# 类,它将接收来自 JSON 帖子的所有参数,并在整个用户会话中使用这个类和值。这是针对电子商务采购系统的打孔实施。
  • @cgotberg 感谢您的提醒。我相信第三方应用程序会保持一致(至少按照规范)。但奇怪的是,他们发送的是一个相当嵌套的对象。

标签: c# json asp.net-mvc-4


【解决方案1】:

我相信你可以使用 json.NET 的属性属性系统来纠正这个问题,文档在这里。 http://james.newtonking.com/json/help/index.html?topic=html/SerializationAttributes.htm

public class ToClass 
{
    public Data[];
    [JsonProperty(PropertyName = "0")]
    public zero Zero = new zero();
}

这将使反序列化器将名为 0 的 json 属性等同于名为 Zero 的 C# 属性

【讨论】:

  • 谢谢!完美的。但是,我不得不使用 JsonConvert.DeserializeObject(jsonstring);而不是 serializer.Deserialize();
猜你喜欢
  • 1970-01-01
  • 2013-03-12
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 2019-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多