假设我有以下课程 –
@H_502_8@
@H_502_8@
public class A { public int P1 { get; internal set; } }
使用json.net,我能够使用P1属性序列化类型.但是,在反序列化期间,未设置P1.如果不修改A类,是否有一种构建方式来处理这个问题?在我的情况下,我使用来自不同程序集的类,不能修改它.@H_502_8@
解决方法
是的,您可以使用自定义ContractResolver使内部属性可写入Json.Net.以下是您需要的代码:
@H_502_8@
@H_502_8@
class CustomResolver : DefaultContractResolver { protected override JsonProperty CreateProperty(MemberInfo member,MemberSerialization memberSerialization) { JsonProperty prop = base.CreateProperty(member,memberSerialization); if (member.DeclaringType == typeof(A) && prop.PropertyName == "P1") { prop.Writable = true; } return prop; } }
要使用解析程序,请创建JsonSerializerSettings的实例,并将其ContractResolver属性设置为自定义解析程序的新实例.然后,将设置传递给JsonConvert.DeserializeObject< T>().@H_502_8@
演示:@H_502_8@
@H_502_8@
class Program { static void Main(string[] args) { string json = @"{ ""P1"" : ""42"" }"; JsonSerializerSettings settings = new JsonSerializerSettings(); settings.ContractResolver = new CustomResolver(); A a = JsonConvert.DeserializeObject<A>(json,settings); Console.WriteLine(a.P1); } }
@H_502_8@
42
小提琴:https://dotnetfiddle.net/1fw2lC@H_502_8@