【发布时间】:2014-02-10 17:38:53
【问题描述】:
每当我尝试使用 Json.NET 序列化 X509Certificate2 实例(不使用其 ISerializable 实现,但选择忽略它)时,Json.NET 都会引发异常。
异常消息是“‘System.Security.Cryptography.X509Certificates.X509Certificate2’上已存在名为‘CertContext’的成员。使用 JsonPropertyAttribute 指定另一个名称。”
我写了一个重现它的程序:
using System.Reflection;
using System.Security.Cryptography.X509Certificates;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
internal class Program
{
private static void Main(string[] args)
{
var resolver = new DefaultContractResolver
{
IgnoreSerializableInterface = true,
DefaultMembersSearchFlags =
BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.GetProperty
};
JsonConvert.SerializeObject(new X509Certificate2(), new JsonSerializerSettings {ContractResolver = resolver});
}
}
经过调查,我注意到 X509Certificate2 实现了一个名为“CertContext”的属性,该属性在其基类 X509Certificate 中隐藏了一个同名的方法。我怎样才能告诉 Json.NET 只采用最派生的属性,就像通常那样?
【问题讨论】: