如何防止类型I的成员的json序列化(或反序列化)无法更改?



在一个大项目中反序列化RecurrenceInfo时,我收到一个异常:

Newtonsoft.Json.JsonSerializationException:无法在Newtonsoft.Json中填充列表类型DevExpress.XtraScheduler.CustomFieldCollection…<lt<省略了20个Newtonsoft内部调用

此MCVE:问题可重复出现

RecurrenceInfo test = (RecurrenceInfo)RecurrenceBuilder.Weekly(DateTime.MinValue, DateTime.MaxValue).ByDay(WeekDays.Monday | WeekDays.Tuesday | WeekDays.Wednesday | WeekDays.Thursday | WeekDays.Friday).Build();
var copy = JsonConvert.DeserializeObject<RecurrenceInfo>(JsonConvert.SerializeObject(test));

我注意到json中有一个空的CustomFields:

"Recurrence": {
...
"OccurrenceCount": 1,
"CustomFields": [],
"Id": "ef7ff4c3-9a3f-4cea-ab08-aa5f63e58c8c",
...

如果我从json中删除,那么也没有例外。

因为这个项目很大,所以改变一些东西很麻烦。所以我正在寻找一种方法,以最小的努力和影响其余的

问题

给定:

public class A
{
[JsonProperty]
public RecurrenceInfo B { get; set; }        
}

如何将属性B.CustomFields从序列化(或反序列化(中排除?理想情况下通过某些属性(伪代码(:

[JsonProperty]
[CustomResolver(typeof(MyCustomResolver))]
public RecurrenceInfo B { get; set; }        

我怀疑答案是";不,您必须将自定义解析器指定为反序列化程序设置;(我试图避免这种情况(,但也许有人看到了我没有看到的东西,或者能想出一个好办法或完全不同的解决方案?

您可以简单地阻止使用[JsonIgnore]属性序列化属性,但要注意使用的是哪个库。System.Test.Json.SerializationNewtonsoft.Json,因为对这两个库调用的属性相同,不会引发错误,只是在跨库时不起作用。

相关内容

  • 没有找到相关文章

最新更新