【发布时间】:2019-12-21 01:14:42
【问题描述】:
当前状态
举个例子:
public class Example
{
[JsonProperty(Order = 1)]
[JsonExtensionData]
public JObject First { get; set; }
[JsonProperty(Order = 2)]
public string Second { get; set; }
}
JsonExtensionData 的属性(属性First)在Second 存在后附加到序列化对象。例如结果为:
{
"second": "blah blah",
"first": {
"name": "value"
}
}
想要的状态
{
"first": {
"name": "value"
},
"second": "blah blah"
}
[JsonProperty(Order = x)] 似乎不适用于标有JsonExtensionData 的属性。关于如何达到所需状态的任何想法?
【问题讨论】:
-
您好,当您将对象转换为 json 对象时,您应该添加其他参数,请检查:newtonsoft.com/json/help/html/JsonPropertyOrder.htm
-
您的观察似乎是正确的。
JsonSerializerInternalWriter.SerializeObject()序列化属性后的扩展数据。JsonExtensionDataAttribute甚至没有Order属性。因此排序扩展数据似乎没有实现。 -
事实上,我有点惊讶合约解析器没有尝试为您的
Example类型创建合约,因为[JsonExtensionData]和[JsonProperty]冲突。 (相反,它只是假设前者取代后者。) -
为了得到你想要的东西,你可能需要一个自定义合约解析器 + 自定义转换器组合。值得吗?
标签: c# .net json serialization json.net