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();
}
Run Code Online (Sandbox Code Playgroud)
这是我要序列化的类
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;
}
}
Run Code Online (Sandbox Code Playgroud)
这是执行 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());
}
}
Run Code Online (Sandbox Code Playgroud)
在这里找到解决方案
.我试图覆盖错误的方法.你需要覆盖该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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7892 次 |
| 最近记录: |