Вы можете использовать наследование для приведения объектов из подкласса в другой класс.
Учитывая следующее json
{
"Name":
{
"first": "bob",
"middle": "john",
"last" : "bobster"
}
}
Вы можете создать несколько классов C #, соответствующих структуре json, следующим образом:
public class Model
{
public FullName Name { get; set; }
}
public class Name
{
[JsonProperty("first")]
public string First { get; set; }
[JsonProperty("last")]
public string Last { get; set; }
}
public class FullName : Name
{
[JsonProperty("middle")]
public string Middle { get; set; }
}
Обратите внимание, что:
FullName
наследуется от Name
- класс
Model
обладает свойством типа FullName
(т.е. наиболее конкретный объект)
Вы можете десериализовать объект типа Модель, а затем привести свойство Name
следующим образом:
string json = @"{
""Name"":
{
""first"": ""bob"",
""middle"": ""john"",
""last"" : ""bobster""
}
}";
Model model = JsonConvert.DeserializeObject<Model>(json);
Name name = model.Name as Name;
Редактировать
В качестве альтернативы вы можете создать общий класс следующим образом
public class Model<TName> where TName : Name
{
public TName Name { get; set; }
}
десериализация JSON:
string json = @"{
""Name"":
{
""first"": ""bob"",
""middle"": ""john"",
""last"" : ""bobster""
}
}";
var fullName = JsonConvert.DeserializeObject<Model<FullName>>(json);
var name = JsonConvert.DeserializeObject<Model<Name>>(json);