将具有变量名称/值对的JSON反序列化为C#中的对象

时间:2012-05-11 17:46:57

标签: c# .net json parsing deserialization

我正在使用C#.NET 4.0将JSON解析为自定义对象。我正在使用JavaScriptSerializer.Deserialize将它映射到我写的类。问题是,JSON的名称/值对不是静态的,并且根据参数isChain而变化,如此JSON片段中所示(底部的更好链接):

{
   "STATE_WALK_LEFT":{
      "isChain":"1",
      "x":"1"
   },
   "STATE_WALK_LEFT_0":{
      "x":"0"
   },
   "STATE_WALK_LEFT_1":{
      "x":"40"
   },
   "STATE_WALK_LEFT_2":{
      "x":"80"
   },
   "STATE_WALK_RIGHT":{
      "isChain":"0"
   },
   "STATE_RUN_LEFT":{
      "isChain":"0"
   }
}

链可以在链中的_STATE_0到_STATE_25条目中有任何位置。有没有办法存储这些数据,所以我不必像这样编写12 * 26个空类:

public StateWalkLeft0 STATE_WALK_LEFT { get; set; }
public StateWalkLeft0 STATE_WALK_LEFT_0 { get; set; }
public StateWalkLeft1 STATE_WALK_LEFT_1 { get; set; }
public StateWalkLeft2 STATE_WALK_LEFT_2 { get; set; }
public StateWalkLeft3 STATE_WALK_LEFT_3 { get; set; }

是否有一个库或其他一些方法可用于部分解析 STATE_0,STATE_1等字段?您是否可以建议添加这些最近添加的JSON对的方法?

编辑澄清: 为了了解我正在使用的内容,这里是从JSON派生的类:

Check out my full Class to get an idea of what the JSONs contain

基本上,我只需要一种方法来存储这些最近实现的链在这个类中以某种方式进行处理。所有这些类/属性都是从这些JSON生成的。

1 个答案:

答案 0 :(得分:2)

使用Newtonsoft Json.NET以及代码

后面的示例
internal struct ChainX
{
  public int x { get; set; }
  public int isChain { get; set; }
}

    static string json = 
@"{
   ""STATE_WALK_LEFT"":{
      ""isChain"":""1"",
      ""x"":""1""
   },
   ""STATE_WALK_LEFT_0"":{
      ""x"":""0""
   }, 
   ""STATE_WALK_LEFT_1"":{
      ""x"":""40""
   },
   ""STATE_WALK_LEFT_2"":{
      ""x"":""80""
   },
   ""STATE_WALK_RIGHT"":{
      ""isChain"":""0""
   },
   ""STATE_RUN_LEFT"":{
      ""isChain"":""0""
   }
}";

和一行反序列化为Dictionary:

var values = JsonConvert.DeserializeObject<Dictionary<string, ChainX>>(json);

之后,您可以通过字典键简单地访问值:

ChainX valueWalkLeft1 = values["STATE_WALK_LEFT_1"];