将JSON解析为C#对象,并在JSON字符串中将“0”作为对象名称

时间:2014-03-31 17:01:00

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

我收到一个JSON obejct来使用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);

问题: 由于&#34; 0&#34;我在为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#类生成器,要么失败,要么创建一个名为&#39; 0&#39;这当然不会编译。

注释: 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; }
}

1 个答案:

答案 0 :(得分:6)

我相信你可以使用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#属性等同于