rak*_*esh 9 c# serialization json get json.net
我有一个properties有私人制定者的类,我希望这些属性可以使用deSerialized 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());
    }
}
在这里找到解决方案 
.我试图覆盖错误的方法.你需要覆盖该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;
    }
| 归档时间: | 
 | 
| 查看次数: | 7892 次 | 
| 最近记录: |