amb*_*ivi 6 json.net deserialization
假设我有以下课程 -
public class A
{
public int P1 { get; internal set; }
}
Run Code Online (Sandbox Code Playgroud)
使用json.net,我能够使用P1属性序列化类型.但是,在反序列化期间,未设置P1.如果不修改A类,是否有一种构建方式来处理这个问题?在我的情况下,我使用来自不同程序集的类,不能修改它.
是的,您可以使用自定义ContractResolver使内部属性可写入Json.Net.以下是您需要的代码:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
要使用解析程序,请创建一个实例,JsonSerializerSettings并将其ContractResolver属性设置为自定义解析程序的新实例.然后,将设置传递给JsonConvert.DeserializeObject<T>().
演示:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
42
Run Code Online (Sandbox Code Playgroud)
小提琴:https://dotnetfiddle.net/1fw2lC
| 归档时间: |
|
| 查看次数: |
3033 次 |
| 最近记录: |