在一个大项目中反序列化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.Serialization
或Newtonsoft.Json
,因为对这两个库调用的属性相同,不会引发错误,只是在跨库时不起作用。