【发布时间】:2022-12-08 02:52:14
【问题描述】:
我有两个“数据”类:
public class BaseData
{
public string BaseDataStuff { get; set; }
}
public class ChildData : BaseData
{
public string ChildDataStuff { get; set; }
}
和一个“容器”类:
public class Container
{
public BaseData Data { get; set; }
}
然后我有以下控制器:
public class Controller : ControllerBase
{
private readonly ChildData Data;
private readonly Container Container;
public Controller()
{
Data = new ChildData()
{
BaseDataStuff = "base stuff",
ChildDataStuff = "child stuff"
};
Container = new Container()
{
Data = Data
};
}
[HttpGet("data")]
public ActionResult<BaseData> GetData() => Ok(Container.Data);
[HttpGet("container")]
public ActionResult<Container> GetContainer() => Ok(Container);
}
第一个方法只返回 ChildData 实例。当我大摇大摆地运行它时,我得到了我期望的 JSON:
{
"childDataStuff": "child stuff",
"baseDataStuff": "base stuff"
}
当我通过 swagger 运行第二种方法时,看起来它将 ChildData 实例转换为 BaseData。我得到以下 JSON:
{
"data": {
"baseDataStuff": "base stuff"
}
}
有人可以解释这里发生了什么吗?
【问题讨论】:
-
public BaseData Data { get; set; } -
@RomanRyzhiy,那又怎样?运行时类型不就是Data Child Data吗?
-
System.Text.Json的JsonSerializer.Serialize是这样工作的,Newtonsoft.Json是正常工作的。 -
@RomanRyzhiy 知道如何让它按我想要的方式工作吗?即序列化为ChildData。
-
这取决于您的 Web 服务器的构建方式。但那将是极其错误的。只是一个小问题:假设你有一个“正确的”json,在“数据”部分有两个字段,你期望这个
var container = JsonConvert.DeserializeObject<Container>(jsonStr);的结果是什么?
标签: c# .net asp.net-core asp.net-core-webapi