我正在使用最新版本的Newtonsoft Json.Net来序列化我的web服务返回的复杂类型。由于某些原因,如果我应用[JsonProperty]属性,这些字段就不会序列化:
[DataContract]
[JsonObject(MemberSerialization = Newtonsoft.Json.MemberSerialization.OptIn)]
public class ScalarResult
{
[JsonProperty(Order = 0)]
public string QueryId { get; set; }
[JsonProperty(Order = 1)]
public float CurrentPeriodValue { get; set; }
[JsonProperty(Order = 2)]
public bool HasPriorValue { get; set; }
[JsonProperty(Order = 3)]
public float PriorPeriodValue { get; set; }
[JsonProperty(Order = 4)]
public float ChangeOverPrior { get; set; }
[JsonProperty(Order = 5)]
public float ChangeOverPriorPercent { get; set; }这导致返回对象不足:
{
"SomethingElse": "why am I the only thing visible?"
}如果我将[DataMember]添加到每个字段(根据Json.NET文档,这些字段是我不应该这么做 ),则字段将显示出来,但(Order = x)属性将被忽略,这使我相信Json.NET可能实际上并不在执行序列化:
[DataContract]
[JsonObject(MemberSerialization = Newtonsoft.Json.MemberSerialization.OptIn)]
public class ScalarResult
{
[DataMember]
[JsonProperty(Order = 0)]
public string QueryId { get; set; }
[DataMember]
public string SomethingElse { get; set; }
[DataMember]
[JsonProperty(Order = 1)]
public float CurrentPeriodValue { get; set; }
[DataMember]
[JsonProperty(Order = 2)]
public bool HasPriorValue { get; set; }
[DataMember]
[JsonProperty(Order = 3)]
public float PriorPeriodValue { get; set; }
[DataMember]
[JsonProperty(Order = 4)]
public float ChangeOverPrior { get; set; }
[DataMember]
[JsonProperty(Order = 5)]
public float ChangeOverPriorPercent { get; set; }其结果是(错误的顺序):
{
"ChangeOverPrior": 8,
"ChangeOverPriorPercent": 0.25,
"CurrentPeriodValue": 40,
"HasPriorValue": true,
"PriorPeriodValue": 32,
"QueryId": "CitiesMonitored_count",
"SomethingElse": "why am I the only thing visible?"
}对于如何验证Json.Net正在进行序列化有什么想法吗?如果是,为什么忽略(Order =)属性?
https://stackoverflow.com/questions/20293141
复制相似问题