1

逆シリアル化する必要がある JSON がありますが、プロパティ名を持つクラスを作成したくありません。

JSONで得られるものは次のとおりです。

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

では、どうすればこれを行うことができますか?

前もってありがとう:)

4

4 に答える 4

3

JavaScriptSerializerを使用できます

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

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

または、必要に応じて、 Json.Net

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

Json.Net も使用できますdynamic

dynamic list = JsonConvert.DeserializeObject(json);
var wdth = list[0].width;
于 2012-12-06T09:52:21.043 に答える
2

Using Json.net, you can deserialize directly to an anonymous class:

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});

I'm assuming here id can be any object (as in your exemple it can be an int or a string), width must be an int and sortable must be a boolean.

于 2012-12-06T09:58:34.577 に答える
0
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);
    }
}
于 2012-12-06T09:55:43.170 に答える
0

json.net を使用できます

それがあなたが探しているものかどうかはわかりません。

   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);
}
于 2012-12-06T09:50:11.760 に答える