我有一个这样的DTO类:
public class MyDto
{
public KeyValuePair<string, string> Identifier { get; set; }
public double Value1 { get; set; }
public string Value2 { get; set; }
}
两个实例可能看起来像这样:
var results = new List<MyDto>
{
new MyDto
{
Identifier = new KeyValuePair<string, string>("Car", "Ford"),
Value1 = 13,
Value2 = "A"
},
new MyDto
{
Identifier = new KeyValuePair<string, string>("Train", "Bombardier"),
Value1 = 14,
Value2 = "B"
},
};
在ASP.NET Web API(使用Json.NET)中序列化结果时,输出如下所示:
[
{
"Identifier": {
"Key": "Car",
"Value": "Ford"
},
"Value1": 13,
"Value2": "A"
},
{
"Identifier": {
"Key": "Train",
"Value": "Bombardier"
},
"Value1": 14,
"Value2": "B"
}
]
但是我想这样:
[
{
"Car": "Ford",
"Value1": 13,
"Value2": "A"
},
{
"Train": "Bombardier",
"Value1": 14,
"Value2": "B"
}
]
我该如何实现?我是否需要编写自定义JsonConverter
并手动完成所有操作?由于DTO类位于无法访问Json.NET的单独程序集中,因此无法使用特定的Json.NET属性。
我不限于使用KeyValuePair<string, string>
。我只需要一个允许我拥有灵活属性名称的数据结构。
编辑:此答案适用于问题[[最初询问
KeyValuePair<>
,您可以像这样通过应用[JsonExtensionData]
轻松地将字典序列化为父对象的一部分: