TypeNameHandlingを使用して、jsonの派生クラスのリストを直列化および逆シリアル化します。含まれるように、基本クラスを置くために属性がありTypeNameクラスの属性を持つハンドリング
[RoutePrefix("Animals")]
public class AnimalsController : ApiController
{
public List<Animal> Get()
{
List<Animal> animals = new List<Animal>();
animals.Add(new FlyingAnimal());
animals.Add(new SwimmingAnimal());
return animals;
}
}
: それは、プロパティと属性今JsonProperty
public abstract class Animal
{
public bool CanFly { get; set;}
}
public class FlyingAnimal : Animal
{
public FlyingAnimal() { this.CanFly = true; }
}
public class SwimmingAnimal : Animal
{
public SwimmingAnimal() { this.CanFly = false; }
}
public class World
{
public World() {
this.Animals = new List<Animal>();
this.Animals.Add(new FlyingAnimal());
this.Animals.Add(new SwimmingAnimal());
}
[JsonProperty(ItemTypeNameHandling = TypeNameHandling.Auto)]
public List<Animal> Animals { get; set; }
}
と完璧に動作し、私は、派生クラスのリストを返すWebAPIのを必要としますシリアル化の型?私は成功せず、試してみました:私はJsonSerializerSettings
変更することができます知っている
[JsonObject(ItemTypeNameHandling = TypeNameHandling.Auto)]
public abstract class Animal
しかし、私は
はい、チーム内でこの回避策を使用する場合、各開発者はリストの代わりにListAnimalsを作成してリストをシリアル化する必要があることを知っておく必要があります。だから私は、より柔軟なソリューションを望んだ – Troopers