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);
}