关于c#:将JSON反序列化为?

Deserialize JSON to?

本问题已经有最佳答案,请猛点这里访问。

我的反序列化JSON which need to,but我想要创建的类和属性的名称。P></

是什么让JSON:P></

1
"[{"id":1,"width":100,"sortable":true}, {"id":"Change","width":100,"sortable":true}]"

我知道如何做这?P></

6:thanks for)P></


您可以使用javascriptserializer

1
2
3
4
var list = new JavaScriptSerializer()
                  .Deserialize<List<Dictionary<string, object>>>(json);

var id = list[0]["id"];

或者如果你愿意,json.net

1
var list2 = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(json);

json.net还允许您使用dynamic

1
2
dynamic list = JsonConvert.DeserializeObject(json);
var wdth = list[0].width;


使用json.net,可以直接反序列化到匿名类:

1
2
3
4
5
var json ="[{"id":1,"width":100,"sortable":true}, "id":"Change","width":100,"sortable":true}]";

var myExempleObject = new {id = new object(), width = 0, sortable = false};

var myArray = JsonConvert.DeserializeAnonymousType(json, new[] {myExempleObject});

我假设这里的id可以是任何对象(例如,它可以是int或字符串),宽度必须是int,可排序必须是布尔值。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

class Program
{
    static void Main(string[] args)
    {
        string json ="[{"id":1,"width":100,"sortable":true}, {"id":"Change","width":100,"sortable":true}]";
        JArray array = JsonConvert.DeserializeObject(json) as JArray;
        if (array != null)
        {
            foreach (JObject jObj in array)
                Console.WriteLine("{0,10} | {1,10} | {2,10}", jObj["id"], jObj["width"], jObj["sortable"]);
        }
        Console.ReadKey(true);
    }
}

您可以使用json.net

我不确定这是不是你要找的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
   string json = @"{
    'CPU': 'Intel',
    'PSU': '500W',
    'Drives': [
      'DVD read/writer'
      /*(broken)*/,
      '500 gigabyte hard drive',
      '200 gigabype hard drive'
    ]
}"
;

JsonTextReader reader = new JsonTextReader(new StringReader(json));
while (reader.Read())
{
  if (reader.Value != null)
    Console.WriteLine("Token: {0}, Value: {1}", reader.TokenType, reader.Value);
  else
    Console.WriteLine("Token: {0}", reader.TokenType);
}