IEnumerable 在 Json.NET 中序列化为 [JsonObject],不使用属性
Posted
技术标签:
【中文标题】IEnumerable 在 Json.NET 中序列化为 [JsonObject],不使用属性【英文标题】:IEnumerable serialize as [JsonObject] in Json.NET, without using the attribute 【发布时间】:2022-01-19 12:07:09 【问题描述】:我想将 IEnumerable 序列化为 JsonObject,就像通过应用 [JsonObject] 属性对其进行序列化的方式一样,但我无法通过引入此属性来更改 DTO 类。
有没有办法告诉(反)序列化器强制 JsonObject(反)序列化?
【问题讨论】:
请提供您的课程示例和您想要将其序列化为的 json 【参考方案1】:是的,您可以使用自定义 IContractResolver
来执行此操作。您需要做的就是创建一个从 Json.Net 的DefaultContractResolver
派生的解析器类,并覆盖CreateContract(Type)
方法,如下所示,其中FooList
被替换为您的可枚举类型。
class CustomResolver : DefaultContractResolver
protected override JsonContract CreateContract(Type type)
if (type == typeof(FooList))
return CreateObjectContract(typeof(FooList));
return base.CreateContract(type);
将解析器添加到序列化器设置中,并在序列化时使用这些设置:
var settings = new JsonSerializerSettings
ContractResolver = new CustomResolver(),
Formatting = Formatting.Indented
;
string json = JsonConvert.SerializeObject(yourObject, settings);
这是一个演示:https://dotnetfiddle.net/ocyjU4
【讨论】:
非常酷,正是我所需要的。这个例子是正确的,我实际上想要一个带有额外元数据的列表来序列化为对象:-)以上是关于IEnumerable 在 Json.NET 中序列化为 [JsonObject],不使用属性的主要内容,如果未能解决你的问题,请参考以下文章
.NET(C#) Json.Net(newtonsoft)使用LINQ查询JSON数据
Newtonsoft.Json Json.Net02.02序列化指引Serialization Guide
一:Newtonsoft.Json 支持序列化与反序列化的.net 对象类型;