JSON.Net序列化器忽略JsonProperty?
我有以下实体类:
public class FacebookComment : BaseEntity { [BsonId(IdGenerator = typeof(ObjectIdGenerator))] [BsonRepresentation(MongoDB.Bson.BsonType.ObjectId)] [JsonProperty("_id")] public ObjectId Id { get; set; } public int? OriginalId { get; set; } public DateTime Date { get; set; } public string Message { get; set; } public string Sentiment { get; set; } public string Author { get; set; } }
当此对象序列化为JSON时,我希望Id字段写为“_id”:{…}。 AFAIK,我只需要将所需的属性名传递给JsonProperty属性; 我应该好好去。 但是,当我调用JsonConvert.SerializeObject时; 它似乎忽略了我的属性并改为呈现:
{ Author: "Author name", Date: "/Date(1321419600000-0500)/", DateCreated: "/Date(1323294923176-0500)/", Id: { CreationTime: "/Date(0)/", Increment: 0, Machine: 0, Pid: 0, Timestamp: 0 }, Message: "i like stuff", OriginalId: null, Sentiment: "Positive" }
如您所见,Id字段使用错误的字段名称进行渲染。
有任何想法吗? 在这个问题上工作了一个小时; 无法弄清楚为什么序列化器似乎忽略了我的JsonProperty。
非常感谢任何建设性的意见。
简答:确保所有程序集都引用了SAME EXACT JSON.NET DLL。 可能发生的是你在一个程序[JsonProperty]
从一个DLL应用[JsonProperty]
,并从另一个正在寻找不同[JsonProperty]
序列化该对象,并且因为CLR对象类型不同,所以它实际上被忽略。
更长的答案 :我只是有这个问题,但幸运的是因为我有一个与JsonProperty
一起工作的JsonProperty
而且我没有能够做一些侦探工作。
我把非工人阶级剥离到最低限度,并将其与工人阶级进行比较,看不出任何差异 – 除非非工作阶级处于不同的集合中。
当我将课程移动到另一个组件时,它完美地工作了。
我试图查看命名空间的JSON序列化,但是这似乎并不适用,所以我查看了引用,确定我在我的实体DLL和NUGET 4.5版本中引用了一个旧的JSONNET3.5 dll在我的主项目文件中。
这给了我两个[JsonProperty]
属性的实例(它只是一个普通的类),只是因为它们被命名相同并不意味着序列化器甚至会识别该属性。
这篇文章对我有帮助。
我用过serialiser:
new JavaScriptSerializer().Serialize(message)
但是严格地使用这个:
JsonConvert.SerializeObject(message);
我通过使用[System.Runtime.Serialization.DataMember(Name =“_ id”)]而不是JsonProperty标记我的Id属性来修复此问题。 还不完全清楚为什么它最初不起作用……
上述就是C#学习教程:JSON.Net序列化器忽略JsonProperty?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/985615.html