Json.net 不会为自定义执行调用自定义协定解析程序



我需要将有关自定义异常类型的信息从 WebApi Web 服务传递到客户端。为此,我尝试使用 Json.Net 序列化程序 + CustomContractResolver 来控制发送到客户端的内容。

public class Data //: Exception
{
    public string Prop1 { get; set; }
    public string Prop2 { get; set; }
    public Data()
    {
        Prop1 = "Hi";
        Prop2 = "Bye";
    }
}
public class CustomContractResolver : DefaultContractResolver
{
    // !!! Method is not being invoked if Data is inherited from Exception
    protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
    {
        JsonProperty property = base.CreateProperty(member, memberSerialization);
        property.ShouldSerialize = instance => property.PropertyName == "Prop1";
        return property;
    }
}
class Program
{
    static void Main(string[] args)
    {
        var settings = new JsonSerializerSettings 
                           {
                               ContractResolver = new CustomContractResolver() 
                           };
        string json = JsonConvert.SerializeObject(new Data(), settings);
        Console.WriteLine(json);
        Console.ReadLine();
    }
}

我尝试使用 Json.Net 6.0.4 和 6.0.6 运行此代码。使用的是.Net Framework 4.5.0和4.5.2。但问题是相同的 - 当数据继承自异常自定义合同解析器不起作用时(nuget 配置行:包 id="Newtonsoft.Json" 版本="6.0.6" targetFramework="net45" 或包 id="Newtonsoft.Json" 版本="6.0.6" targetFramework="net452")

同时,如果代码从UnitTest项目(xUnit.Net)执行,并且代码本身位于具有.Net 4.5.0目标平台的PCL库中,则代码工作正常(nuget config line:package id="Newtonsoft.Json" version="6.0.6" targetFramework="portable-net45+win+wpa81+MonoAndroid10+MonoTouch10")。

任何人都可以建议如何自定义自定义异常类型的哪些属性将包含在 Json 字符串中吗?

尝试使用这个:


ContractResolver = new CustomContractResolver { IgnoreSerializableInterface = true, IgnoreSerializableAttribute = true };

相关内容

  • 没有找到相关文章

最新更新