繁体   English   中英

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

[英]Deserializing a JSON with variable name/value pairs into object in C#

我正在使用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生成的。

使用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"];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM