7

我正在使用 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 派生的类:

查看我的完整课程以了解 JSON 包含的内容

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

4

1 回答 1

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

和一行代码反序列化为字典:

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

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

ChainX valueWalkLeft1 = values["STATE_WALK_LEFT_1"];
于 2012-05-11T20:04:47.057 回答