gpt4 book ai didi

c# - JSON.Net 序列化程序忽略 JsonProperty?

转载 作者:IT王子 更新时间:2023-10-29 04:43:25 24 4
gpt4 key购买 nike

我有以下实体类:

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。

非常感谢任何建设性的意见。

最佳答案

简短回答:确保您的所有程序集都引用完全相同 JSON.NET DLL。可能发生的情况是您从一个程序集中的一个 DLL 应用 [JsonProperty],并序列化来自正在寻找不同 [JsonProperty] 的不同程序集的对象,因为CLR 对象类型不同,它实际上被忽略了。


更长的答案:我刚刚遇到了这个问题,但幸运的是因为我有一个类正在使用 JsonProperty 而另一个不是我能够做一些侦探工作。

我将非 worker 类(Class)剥离到最低限度,并将其与 worker 类(Class)进行比较,没有发现任何差异 - 除了非 worker 类(Class)属于不同的集会这一事实。

当我将该类移动到另一个程序集时,它可以正常工作。

我四处寻找了一下,试图研究命名空间的 JSON 序列化,但这似乎并不适用,所以我查看了引用文献,果然我在我的实体 DLL 和我的主项目文件中的 NUGET 4.5 版本。

这为我提供了 [JsonProperty] 属性的两个实例(这只是一个常规类),只是因为它们的名称相同并不意味着序列化程序甚至会识别该属性.

关于c# - JSON.Net 序列化程序忽略 JsonProperty?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8424151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com