2016-08-24 90 views
1

如何转换(反序列化)以下json格式的C#对象? 这一切JSON文本转换(反序列化)一次性或我需要一次又一次转换子对象
需要将以下json转换(反序列化)为C#对象

我想这样

var x = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, object>>(json_data); 

{ 
    "Id":"1405de4d-2823-43b4-8dba-66c2714bc7f", 
    "Name":"Sports/Boxing", 

    "Parent":{ 
     "Id":"88ada251-cff1-4eb7-bc47-2e6d366616a63", 
     "Name":"http://localhost:80/PDC/Sports/Boxing", 
     "DurationMilliseconds":227.2, 
     "StartMilliseconds":0, 
     "Children":[ 
     { 
      "Id":"dbf36d18-8abd-43f1-ae9b-640cb3d77a87", 
      "Name":"xx", 
      "DurationMilliseconds":212, 
      "Milliseconds":15.1, 
      l 
} 
+2

有什么问题什么你在试图? –

+0

@ Great.And.Powerful.Oz也许,但是在原始问题中没有任何背景可以解决问题。这个问题之前会过于宽泛地被封闭。现在,由于编辑,它实际上可以回答。 –

回答

1

东西使用http://jsonclassgenerator.codeplex.com/和手册调整,我已经减少了需要的类为2(根类和孩子类实际上是相同的):

请注意,您可以给任何名称到您的类,什么使得与JSON的链接是每个属性上方的[JsonProperty("...")]属性。

using System; 
using Newtonsoft.Json; 

namespace WpfApplication3 
{ 
    public partial class MainWindow 
    { 
     private readonly string json = @" 
{ 
    ""Id"":""1405de4d-2823-43b4-8dba-66c2714bc7f"", 
    ""Name"":""Sports/Boxing"", 
    ""Started"":""\/Date(1472064057630)\/"", 
    ""DurationMilliseconds"":227.2, 
    ""MachineName"":""RED"", 
    ""CustomLinks"":null, 
    ""Root"":{ 
     ""Id"":""88ada251-cff1-4eb7-bc47-2e6d366616a63"", 
     ""Name"":""http://localhost:80/PDC/Sports/Boxing"", 
     ""DurationMilliseconds"":227.2, 
     ""StartMilliseconds"":0, 
     ""Children"":[ 
     { 
      ""Id"":""dbf36d18-8abd-43f1-ae9b-640cb3d77a87"", 
      ""Name"":""Red Eagle"", 
      ""DurationMilliseconds"":212, 
      ""StartMilliseconds"":15.1, 
      ""Children"":[ 
       { 
        ""Id"":""dbd7018d-421d-42bd-b0e5-fd3e9462cca0"", 
        ""Name"":""Blue Eagle"", 
        ""DurationMilliseconds"":106.8, 
        ""StartMilliseconds"":120.4, 
        ""Children"":[ 
        { 
         ""Id"":""c86199e0-d12b-4bd0-90ea-9f15a2618160"", 
         ""Name"":""True Eagle"", 
         ""DurationMilliseconds"":0.3, 
         ""StartMilliseconds"":226.9, 
         ""Children"":null, 
         ""CustomTimings"":null 
        } 
        ], 
        ""CustomTimings"":null 
       } 
      ], 
      ""CustomTimings"":null 
     } 
     ], 
     ""CustomTimings"":null 
    }, 
    ""ClientTimings"":null, 
    ""User"":""::1"", 
    ""Storage"":null 
}"; 

     public MainWindow() 
     { 
      InitializeComponent(); 
      var o = JsonConvert.DeserializeObject<MyObject>(json); 
     } 
    } 

    public class Child 
    { 
     [JsonProperty("Id")] 
     public string Id { get; set; } 

     [JsonProperty("Name")] 
     public string Name { get; set; } 

     [JsonProperty("DurationMilliseconds")] 
     public double DurationMilliseconds { get; set; } 

     [JsonProperty("StartMilliseconds")] 
     public double StartMilliseconds { get; set; } 

     [JsonProperty("Children")] 
     public Child[] Children { get; set; } 

     [JsonProperty("CustomTimings")] 
     public object CustomTimings { get; set; } 
    } 

    public class MyObject 
    { 
     [JsonProperty("Id")] 
     public string Id { get; set; } 

     [JsonProperty("Name")] 
     public string Name { get; set; } 

     [JsonProperty("Started")] 
     public DateTime Started { get; set; } 

     [JsonProperty("DurationMilliseconds")] 
     public double DurationMilliseconds { get; set; } 

     [JsonProperty("MachineName")] 
     public string MachineName { get; set; } 

     [JsonProperty("CustomLinks")] 
     public object CustomLinks { get; set; } 

     [JsonProperty("Root")] 
     public Child Root { get; set; } 

     [JsonProperty("ClientTimings")] 
     public object ClientTimings { get; set; } 

     [JsonProperty("User")] 
     public string User { get; set; } 

     [JsonProperty("Storage")] 
     public object Storage { get; set; } 
    } 
} 
+0

不知道这怎么回答这个问题。 – Rahul

+0

OP要求对一个对象进行反序列化,除非我误以为他可能在寻找一个对象(不是简单的字典)。 – Aybe

+0

虽然这是正确的,但我会说OP的问题完全不清楚,因为最后他要求以表格的形式显示。 – Rahul

0

有两种方式:

  1. 你可以反序列化(使用Newtonsoft.Json)到JObject:

    var jsonObj = JsonConvert.DeserializeObject(json) as JObject; 
    
    // Then you may access properties like this: 
    var id = jsonObj ["Id"].Value<int>(); 
    

而且,有可能做穿越这个“树”对象。 在http://www.newtonsoft.com/json/help/html/t_newtonsoft_json_linq_jobject.htm

更多细节
  • 您可以生成类了JSON(如http://json2csharp.com/)的和写的东西是这样的:

    var rootObject = Newtonsoft.Json.JsonConvert.DeserializeObject<RootObjectType>(json); 
    
  • +0

    我宁愿第一种方式进行迭代。以下是它的外观:http://pastebin.com/NRxerwg0 – Nazar