Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将具有变量名/值对的JSON反序列化为C中的对象#_C#_.net_Json_Parsing_Deserialization - Fatal编程技术网

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

C# 将具有变量名/值对的JSON反序列化为C中的对象#,c#,.net,json,parsing,deserialization,C#,.net,Json,Parsing,Deserialization,我正在使用C#.NET 4.0将JSON解析为自定义对象。我正在使用JavaScriptSerializer.Deserialize将其映射到我编写的类。问题是,JSON的名称/值对不是静态的,并且根据参数isChain而变化,如此JSON片段所示(底部的更好链接): 链中可以有从_STATE_0到_STATE_25的任何条目。有没有办法存储这些数据,这样我就不必像这样编写12*26个空类: public StateWalkLeft0 STATE_WALK_LEFT { get; set; }

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

链中可以有从_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生成的。

使用和作为下面代码的示例

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

“我不喜欢使用递归、第三方libs或反序列化到var/dynamic中。”祝你在这些范围内找到解决方案好运使用@casperOne+1你可以很容易地做到这一点,但我建议使用它。Json.NET非常缓慢且庞大,由于其复杂性,很难进行修改。@有趣的是,我不知道这一点。和。我必须试试。问题是,我的JSON包含各种其他多级条目——请查看我的编辑以澄清。Json.NET是否支持某种条件或子反序列化?如果可以,我会+1你,因为你确实在我提供的上下文中回答了这个问题。我的错误是不够清楚。Json.NET解决了您的问题。您不能像我在示例中所做的那样反序列化为类型化对象。这里有很多方法和重载。因此,您可以使用其中一个来生成例如Dictionary或内部Json.NET对象,然后可以逐节点反序列化树。如果这会有问题,请留下您的解决方案以及TypeBuilder/Reflection解决了我的问题。非常感谢。
var values = JsonConvert.DeserializeObject<Dictionary<string, ChainX>>(json);
ChainX valueWalkLeft1 = values["STATE_WALK_LEFT_1"];