C# 反序列化问题JsonProperty ContractResolver
我有一个自定义属性:C# 反序列化问题JsonProperty ContractResolver,c#,json,json.net,deserialization,C#,Json,Json.net,Deserialization,我有一个自定义属性: [JsonProperty("123abc")] public int Id {get; set;} 及 var container=Serializer.Deserialize(新的JsonTextReader(新的StreamReader(stream)); 似乎我必须重写DefaultContractResolver,它是我继承的代码的一部分,它可能没有实际处理自定义字段 private readonly Dictionary<MemberInfo, str
[JsonProperty("123abc")]
public int Id {get; set;}
及
var container=Serializer.Deserialize(新的JsonTextReader(新的StreamReader(stream));
似乎我必须重写DefaultContractResolver,它是我继承的代码的一部分,它可能没有实际处理自定义字段
private readonly Dictionary<MemberInfo, string> _names = new Dictionary<MemberInfo, string>();
public ContractResolver() : base(false) { }
protected override string ResolvePropertyName(string propertyName)
{ return propertyName; }
protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
{
var lst = new List<JsonProperty>();
foreach (var member in GetSerializableMembers(type)) {
var prop = CreateProperty(member, memberSerialization);
string customName;
**if (_names.TryGetValue(member, out customName))
prop.PropertyName = customName;**
lst.Add(prop);
}
return lst;
}
private readonly Dictionary\u names=new Dictionary();
PublicContractResolver():base(false){}
受保护的重写字符串ResolvePropertyName(字符串propertyName)
{返回propertyName;}
受保护的重写IList CreateProperties(类型类型,MemberSerialization MemberSerialization)
{
var lst=新列表();
foreach(GetSerializableMembers中的var成员(类型)){
var prop=CreateProperty(成员,成员序列化);
字符串customName;
**if(_names.TryGetValue(成员,out customName))
prop.PropertyName=自定义名称**
第一次添加(道具);
}
返回lst;
}
“突出显示的线”不进行“映射”,Id始终为0。我查找了一些答案,并将代码更改为:
private Dictionary<string, string> PropertyMappings = new Dictionary<string, string>{{"Id", "123abc"} };
protected override string ResolvePropertyName(string propertyName)
{
string resolvedName = null;
var resolved = this.PropertyMappings.TryGetValue(propertyName, out resolvedName);
return (resolved) ? resolvedName : base.ResolvePropertyName(propertyName);
}
private Dictionary PropertyMappings=新字典{{“Id”,“123abc”};
受保护的重写字符串ResolvePropertyName(字符串propertyName)
{
字符串resolvedName=null;
var resolved=this.PropertyMappings.TryGetValue(propertyName,out resolvedName);
返回(已解析)?resolvedName:base.ResolvePropertyName(propertyName);
}
将null转换为int时出错。我可能遗漏了一些细节。。。请给我一些建议。谢谢
private Dictionary<string, string> PropertyMappings = new Dictionary<string, string>{{"Id", "123abc"} };
protected override string ResolvePropertyName(string propertyName)
{
string resolvedName = null;
var resolved = this.PropertyMappings.TryGetValue(propertyName, out resolvedName);
return (resolved) ? resolvedName : base.ResolvePropertyName(propertyName);
}