This was written in Linqpad (hence the .Dump()
) with the Newtonsoft Json library. Per my comment earlier, this uses a custom deserialization converter. This is pretty quick and probably not optimal and has no error checking code so use at your discretion.
void Main()
{
var input0p = "{ \"Sts\": 1, \"TMtd\": 2, \"SId\": 215, \"T\": 1599453168, \"CCSr\": 98972, \"TId\": 492, \"UId\": 1687, \"NPro\": 3 }";
var input1p = "{ \"Sts\": 1, \"TMtd\": 2, \"SId\": 215, \"T\": 1599453168, \"CCSr\": 98972, \"TId\": 492, \"UId\": 1687, \"NPro\": 3, \"P1\": { \"SKUId\": \"006920180209601\", \"Q\": 1 } }";
var input2p = "{ \"Sts\": 1, \"TMtd\": 2, \"SId\": 215, \"T\": 1599453168, \"CCSr\": 98972, \"TId\": 492, \"UId\": 1687, \"NPro\": 3, \"P1\": { \"SKUId\": \"006920180209601\", \"Q\": 1 }, \"P2\": { \"SKUId\": \"006954767430522\", \"Q\": 1 } }";
var input3p = "{ \"Sts\": 1, \"TMtd\": 2, \"SId\": 215, \"T\": 1599453168, \"CCSr\": 98972, \"TId\": 492, \"UId\": 1687, \"NPro\": 3, \"P1\": { \"SKUId\": \"006920180209601\", \"Q\": 1 }, \"P2\": { \"SKUId\": \"006954767430522\", \"Q\": 1 }, \"P3\": { \"SKUId\": \"006954767410623\", \"Q\": 1 } }";
var input4p = "{ \"Sts\": 1, \"TMtd\": 2, \"SId\": 215, \"T\": 1599453168, \"CCSr\": 98972, \"TId\": 492, \"UId\": 1687, \"NPro\": 3, \"P1\": { \"SKUId\": \"006920180209601\", \"Q\": 1 }, \"P2\": { \"SKUId\": \"006954767430522\", \"Q\": 1 }, \"P3\": { \"SKUId\": \"006954767410623\", \"Q\": 1 }, \"P4\": { \"SKUId\": \"006954767414444\", \"Q\": 4 } }";
var input5p = "{ \"Sts\": 1, \"TMtd\": 2, \"SId\": 215, \"T\": 1599453168, \"CCSr\": 98972, \"TId\": 492, \"UId\": 1687, \"NPro\": 3, \"P1\": { \"SKUId\": \"006920180209601\", \"Q\": 1 }, \"P2\": { \"SKUId\": \"006954767430522\", \"Q\": 1 }, \"P3\": { \"SKUId\": \"006954767410623\", \"Q\": 1 }, \"P4\": { \"SKUId\": \"006954767414444\", \"Q\": 4 }, \"P5\": { \"SKUId\": \"006954767455555\", \"Q\": 5 } }";
Test(input0p);
Test(input1p);
Test(input2p);
Test(input3p);
Test(input4p);
Test(input5p);
}
public void Test(string input)
{
var result = JsonConvert.DeserializeObject<Data>(input);
result.Dump();
}
[JsonConverter(typeof(DataConverter))]
public class Data
{
public int Sts { get; set; }
public int TMtd { get; set; }
public int SId { get; set; }
public int T { get; set; }
public int CCSr { get; set; }
public int TId { get; set; }
public int UId { get; set; }
public int NPro { get; set; }
public ICollection<Element> PValues { get; set;}
}
public class Element
{
public string SKUId { get; set; }
public int Q { get; set; }
}
public class DataConverter : JsonConverter<Data>
{
public override Data ReadJson(JsonReader reader, Type objectType, [AllowNull] Data existingValue, bool hasExistingValue, JsonSerializer serializer)
{
var jobj = JObject.Load(reader);
var result = new Data()
{
Sts = jobj["Sts"].Value<int>(),
TMtd = jobj["TMtd"].Value<int>(),
SId = jobj["SId"].Value<int>(),
T = jobj["T"].Value<int>(),
CCSr = jobj["CCSr"].Value<int>(),
TId = jobj["TId"].Value<int>(),
UId = jobj["UId"].Value<int>(),
NPro = jobj["NPro"].Value<int>(),
PValues = new List<Element>()
};
for (int i = 1; jobj.ContainsKey($"P{i}"); i++)
{
var p = jobj[$"P{i}"];
result.PValues.Add(new Element()
{
SKUId = p["SKUId"].Value<string>(),
Q = p["Q"].Value<int>()
});
}
return result;
}
public override void WriteJson(JsonWriter writer, [AllowNull] Data value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
Output:
