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

Den*_*nys 2 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);
Run Code Online (Sandbox Code Playgroud)

问题: 由于内部对象的"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"
            }
        }
    },
...
}
Run Code Online (Sandbox Code Playgroud)

注意:我已尝试在线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; }
}
Run Code Online (Sandbox Code Playgroud)

eva*_*nal 7

我相信你可以使用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();
}
Run Code Online (Sandbox Code Playgroud)

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