【发布时间】:2022-01-19 12:07:09
【问题描述】:
我想将 IEnumerable 序列化为 JsonObject,就像通过应用 [JsonObject] 属性对其进行序列化的方式一样,但我无法通过引入此属性来更改 DTO 类。
有没有办法告诉(反)序列化器强制 JsonObject(反)序列化?
【问题讨论】:
-
请提供您的课程示例和您想要将其序列化为的 json
标签: c# json serialization json.net
我想将 IEnumerable 序列化为 JsonObject,就像通过应用 [JsonObject] 属性对其进行序列化的方式一样,但我无法通过引入此属性来更改 DTO 类。
有没有办法告诉(反)序列化器强制 JsonObject(反)序列化?
【问题讨论】:
标签: c# json serialization json.net
是的,您可以使用自定义 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);
【讨论】: