C# 序列化使用多态性的对象集合(基类)
我有一个示例控制器,当被调用时,它应该返回一个序列化对象,其中包含一个动物列表,其中所有属性都已显示。我面临的问题是,它只是序列化基类中的属性 型号C# 序列化使用多态性的对象集合(基类),c#,asp.net,json,inheritance,serialization,C#,Asp.net,Json,Inheritance,Serialization,我有一个示例控制器,当被调用时,它应该返回一个序列化对象,其中包含一个动物列表,其中所有属性都已显示。我面临的问题是,它只是序列化基类中的属性 型号 public class MyAnimals { public string Description { get; set; } public ICollection<Animal> Animals { get; set; } } public class Animal
public class MyAnimals
{
public string Description { get; set; }
public ICollection<Animal> Animals { get; set; }
}
public class Animal
{
public string Name { set; get; }
}
public class Dog: Animal
{
public string Says { get; set; }
}
public class Cat : Animal
{
public string Likes { get; set; }
}
之后所需的输出im应如下所示。请告诉我我做错了什么
所需响应
{
"description": "My favorite animals",
"animals": [
{
"name": "Tom"
},
{
"name": "Pluto"
}
]
}
{
"description": "My favorite animals",
"animals": [
{
"name": "Tom",
"Likes": "Cheese"
},
{
"name": "Pluto",
"Says": "Bark"
}
]
}
序列化是问题的第一部分,反序列化是第二部分。 Caleb George和JuanR为您指出了解决问题的好方向和方法
另一种方法是手动序列化每个动物,并将其以名称和值的形式传输到动物数组中。名称将是动物类型和值序列化对象…对于.NET Core 3+项目,您需要安装 安装软件包Microsoft.AspNetCore.Mvc.NewtonsoftJson 并在启动时使用它
services.AddControllers().AddNewtonsoftJson();
这将使用JSON.NET作为默认序列化程序,您可以得到所需的响应
{
"description": "My favorite animals",
"animals": [
{
"likes": "Cheese",
"name": "Tom"
},
{
"says": "Bark",
"name": "Pluto"
}
]
}
请查看对一个类似问题的回答:什么库在这里执行JSON序列化?这是ASP.NET MVC 5?这应该是一个评论,而不是一个答案,特别是因为已经有一个了。
{
"description": "My favorite animals",
"animals": [
{
"likes": "Cheese",
"name": "Tom"
},
{
"says": "Bark",
"name": "Pluto"
}
]
}