我正在使用 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 生成的。
最佳答案
使用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"];
关于c# - 在 C# 中将具有变量名称/值对的 JSON 反序列化为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10556205/