Deserializing a JSON with variable name/value pairs into object in C#
.net, c#, deserialization, json, parsing
Solution
Use Newtonsoft Json.NET and as example following code
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""
}
}";
and a line of code to deserialize to Dictionary:
var values = JsonConvert.DeserializeObject<Dictionary<string, ChainX>>(json);
after that you can simple access values by dictionary key:
ChainX valueWalkLeft1 = values["STATE_WALK_LEFT_1"];
Problem
I am using C# .NET 4.0 to parse a JSON into a custom object. I am using JavaScriptSerializer.Deserialize to map it to a class that I wrote. Problem is, the JSON's name/value pairs are not static and vary depending on the argument isChain, as seen in this JSON fragment (better link at bottom): ``` { "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" } } ``` The chains can have anywhere from _STATE_0 to _STATE_25 entries in the chains. Is there some way to store this data so I don't have to write 12*26 empty classes like so: ``` 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; } ``` Is there a library or some other way I could use to partially parse only the STATE_0, STATE_1, etc fields? Could you maybe suggest a way to add these recently added JSON pairs? Edited to clarify: To get an idea of what I'm working with, here is the Class derived from the JSONs: Check out my full Class to get an idea of what the JSONs contain Basically, I just need a way to store these recently implemented chains in this class somehow for processing. All of those classes/properties are generated from these JSONs.