C#.net如何反序列化JSON的复杂对象

Ass*_*don 28 .net c# json deserialization

我有一个JSON字符串,我需要一些帮助来反序列化它.

没有什么对我有用..这是JSON

{
    "response": [{
        "loopa": "81ED1A646S894309CA1746FD6B57E5BB46EC18D1FAff",
        "drupa": "D4492C3CCE7D6F839B2BASD2F08577F89A27B4ff",
        "images": [{
                "report": {
                    "nemo": "unknown"
                },
                "status": "rock",
                "id": "7e6ffe36e-8789e-4c235-87044-56378f08m30df",
                "market": 1
            },
            {
                "report": {
                    "nemo": "unknown"
                },
                "status": "rock",
                "id": "e50e99df3-59563-45673-afj79e-e3f47504sb55e2",
                "market": 1
            }
        ]
    }]
}
Run Code Online (Sandbox Code Playgroud)

我有一个类的例子,但我不必使用这些类,我不介意使用其他类.这些是类:

public class Report
{
    public string nemo { get; set; }
}

public class Image
{
    public Report report { get; set; }
    public string status { get; set; }
    public string id { get; set; }
    public int market { get; set; }
}

public class Response
{
    public string loopa { get; set; }
    public string drupa{ get; set; }
    public Image[] images { get; set; }
}

public class RootObject
{
    public Response[] response { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想提一下,我已经有了Newtonsoft.Json,所以我可以使用那里的一些功能.

我怎样才能做到这一点?谢谢.

小智 44

我在我的代码中使用这样的,它工作正常

下面是您需要编写的一段代码

using System.Web.Script.Serialization;

JavaScriptSerializer oJS = new JavaScriptSerializer();
RootObject oRootObject = new RootObject();
oRootObject = oJS.Deserialize<RootObject>(Your JSon String);
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考:这是在System.Web.Extensions.dll中 (3认同)

ste*_*r84 38

应该是这样的:

var jobject = JsonConvert.DeserializeObject<RootObject>(jsonstring);
Run Code Online (Sandbox Code Playgroud)

您可以将json字符串粘贴到此处:http://json2csharp.com/以检查您的类是否正确.


fil*_*pko 18

如果您使用C#2010或更高版本,则可以使用动态类型:

dynamic json = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonstring);
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用点表示法访问动态对象中的属性和数组:

string nemo = json.response[0].images[0].report.nemo;
Run Code Online (Sandbox Code Playgroud)


Tej*_*ain 9

首先安装newtonsoft.jsonVisual Studio使用NuGet Package Manager然后添加以下代码:

ClassName ObjectName = JsonConvert.DeserializeObject < ClassName > (jsonObject);
Run Code Online (Sandbox Code Playgroud)