尝试序列化异常时,将忽略自定义解析器

办公室

我想Exception使用自定义解析器序列化

这是一个示例自定义解析器-应该只序列化指定的属性:

public class IncludeSpecifiedPropsResolver : DefaultContractResolver
{
    string[] propsToSerialize = null;
    public IncludeSpecifiedPropsResolver(params string[] propsToSerialize)
    {
        this.propsToSerialize = propsToSerialize;
    }
    protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
    {
        var allProps = base.CreateProperties(type, memberSerialization);
        if (propsToSerialize == null || propsToSerialize.Length == 0)
        {
           return allProps;
        }
        return allProps.Where(p => propsToSerialize.Contains(p.PropertyName)).ToList();
    }
}

用法示例:

string test = JsonConvert.SerializeObject(new Exception("Something went wrong"), new JsonSerializerSettings()
{
    ContractResolver = new IncludeSpecifiedPropsResolver("Message")
}); 

但是,CreateProperties被忽略了。

还缺少什么,以便自定义解析器可以按预期工作?

布赖恩·罗杰斯

这里的问题是Exception实现ISerializable接口,该接口在中有特殊处理DefaultContractResolver:代码路径不经过CreateProperties()您可以通过在解析程序的构造函数中将IgnoreSerializableInterface属性设置为来覆盖此行为true如果这样做,您的代码将按预期工作。

public IncludeSpecifiedPropsResolver(params string[] propsToSerialize)
{
    this.propsToSerialize = propsToSerialize;
    IgnoreSerializableInterface = true;
}

工作演示:https//dotnetfiddle.net/DNhwaH

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用自定义合同解析器而不是JsonConverter属性时,将忽略自定义JsonConverter进行反序列化

如何从自定义反序列化器调用默认解析器(在映射器中注册)

当值为“ null”时,Jackson忽略自定义字段反序列化器

Kotlinx序列化-自定义序列化器可忽略空值

使用具有IDictionary <Mycustomclass,List <string >>的自定义解析器进行反序列化问题

JSON Jackson-使用自定义序列化程序序列化多态类时的异常

将列表解析为自定义序列化程序的参数

设计器序列化自定义结构

Spring Kafka自定义反序列化器

自定义BSON键值序列化器

自定义Angular $ http序列化器

实现复杂的自定义结构序列化器

自定义序列化器和Jackson模式

自定义BigInteger JSON序列化器

MongoDb自定义集合序列化器

序列化器:自定义嵌套关系

Dropwizard的自定义序列化器/反序列化器选项?

自定义Xml序列化器以将值作为xml元素

将服务注入自定义的Jackson序列化器

Automapper自定义解析器

IJSRuntime忽略服务器端Blazor项目中的自定义json序列化程序

JSON 解析器的 Apache Spark 对象不可序列化异常

在Java中使用Jackson反序列化Date字段时引发自定义异常

尝试使用QDatastream序列化自定义类的QList时出现错误C2679

Java自定义序列化

自定义序列化

自定义反序列化

序列化自定义配置

自定义JSON合同解析器可忽略没有自定义批注的所有属性