我有一个具有properties
的类,该类具有私有(private) setter,我希望使用 Json.Net
对这些属性进行反序列化。我知道我可以使用 [JsonProperty]
属性来执行此操作 我想通过实现 DefaultContractResolver
来执行此操作。
这是我一直在使用的一些示例代码,但是这个确实有效。
static void Main(string[] args)
{
var a = new a();
a.s = "somestring";
a.set();
Console.WriteLine(JsonConvert.SerializeObject(a));
var strrr = JsonConvert.SerializeObject(a);
var strobj = JsonConvert.DeserializeObject<a>(strrr,new JsonSerializerSettings
{
ContractResolver = new PrivateSetterContractResolver()
});
Console.Read();
}
这是我要序列化的类
public class a
{
private int test;
public int Test
{
get { return test; }
private set { test = value; }
}
public string s { get; set; }
public void set()
{
test = 33;
}
}
这是 DefaultContractResolver
的实现
public class PrivateSetterContractResolver : DefaultContractResolver
{
protected override List<MemberInfo> GetSerializableMembers(Type objectType)
{
// whait do i do here ???
//this dosent work
return new List<MemberInfo>(objectType.GetProperties().ToList());
}
}
最佳答案
找到解决方案 here
.我试图覆盖错误的方法。您需要覆盖 CreateProperty
方法
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
var prop = base.CreateProperty(member, memberSerialization);
if (!prop.Writable)
{
var property = member as PropertyInfo;
if (property != null)
{
var hasPrivateSetter = property.GetSetMethod(true) != null;
prop.Writable = hasPrivateSetter;
}
}
return prop;
}
关于c# - Json.net 重写 DefaultContractResolver 中的方法以反序列化私有(private) setter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25077831/