Update
Учитывая ваши обновленные классы и обновленные JSON, вы могли бы сделать:
public class RootObject
{
public Root root { get; set; }
}
public class Root
{
public int id {set;get;}
public string name {set;get;}
public Dictionary<string, Container> containers { get; set; }
}
public class Container
{
public int id {set; get;}
public string name {set;get;}
public int value {set;get;}
}
И использовать это нравится:
var root = JsonConvert.DeserializeObject<RootObject>(json);
Обратите внимание, что "root"
свойство в формате JSON требует дополнительного уровня косвенности, который мы предоставили классу RootObject
. Возможно, вы захотите переименовать свой Root
в нечто более наглядное, как RootContainer
.
Update 2
JSON в вопросе был изменен еще раз, чтобы устранить "root"
свойство, так RootObject
не нужна и вам просто нужно сделать:
var root = JsonConvert.DeserializeObject<Root>(json);
Оригинал ответа
Предполагая, что ваш вложенный containers
также имеют тип Container
, вы можете просто сериализации их как Dictionary<string, Container>
собственности:
public class Container
{
public int id { set; get; }
public string name { set; get; }
public int? value { set; get; } // Null when the property was not present in the JSON.
public Dictionary<string, Container> containers { get; set; }
}
Вы бы использовать его как:
public static void Test()
{
string json = @"
{
""id"" : 3223,
""name"" : ""position 3223"",
""containers"" : {
""container_demo"" : {
""id"" : 12,
""name"" : ""demo"",
""value"" : 34
},
""different_name_1"" : {
""id"" : 33,
""name"" : ""demo 3"",
""value"" : 1
},
""another_contaier"" : {
""id"" : 1,
""name"" : ""another demo"",
""value"" : 34
}
}
}";
var container = JsonConvert.DeserializeObject<Container>(json);
JsonSerializerSettings settings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
Debug.WriteLine(JsonConvert.SerializeObject(container, Formatting.Indented, settings));
}
Это производит вывод:
{
"id": 3223,
"name": "position 3223",
"containers": {
"container_demo": {
"id": 12,
"name": "demo",
"value": 34
},
"different_name_1": {
"id": 33,
"name": "demo 3",
"value": 1
},
"another_contaier": {
"id": 1,
"name": "another demo",
"value": 34
}
}
Как вы можете видеть, все данные десериализации и сериализованная успешно.
Свойство 'container' является общим типом? Расскажите о своих классах, пожалуйста. –
Я не знаю, является ли это общим на сервере, но в моей реализации C# это не является общим. – user2598575
это опечатка извините. я исправил – user2598575