Вы можете передать флаг NullValueHandling
атрибуту JsonProperty
, если вы используете Newtonsoft.Вот пример в их документации:
https://www.newtonsoft.com/json/help/html/JsonPropertyPropertyLevelSetting.htm
Редактировать Попробуйте создать следующую структуру объекта:
public class Person
{
public string Email { get; set; }
public DateTime CreatedDate { get; set; }
public List<Role> Roles { get; set; }
}
public class Role
{
public string name { get; set; }
public string type { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string town { get; set; }
}
Затем скопируйтеэтот json в файл и десериализовать вот так
string json = File.ReadAllText("a.json");
Person person = JsonConvert.DeserializeObject<Person>(json);
Редактировать
Что ж, если вы действительно вообще не хотите видеть это свойство, высобираюсь в конечном итоге с некрасивым кодом.Вот быстрый и грязный пример, который работает.
public class PersonA
{
public string Email { get; set; }
public DateTime CreatedDate { get; set; }
public List<RoleB> Roles { get; set; }
}
public class RoleB : RoleA
{
public string town { get; set; }
}
public class PersonB
{
public string Email { get; set; }
public DateTime CreatedDate { get; set; }
public List<RoleA> RolesA { get; set; } = new List<RoleA>();
public List<RoleB> RolesB { get; set; } = new List<RoleB>();
}
public class RoleA
{
public string name { get; set; }
public string type { get; set; }
}
Затем сделайте что-то вроде этого:
string json = File.ReadAllText("a.json");
PersonA personA = JsonConvert.DeserializeObject<PersonA>(json);
PersonB personB = new PersonB() { Email = personA.Email, CreatedDate = personA.CreatedDate };
foreach(var role in personA.Roles)
{
var roleB = role as RoleB;
if (roleB.town != null)
{
personB.RolesB.Add(roleB);
}
else
{
personB.RolesA.Add(new RoleA() { name = roleB.name, type = roleB.type });
}
}