基类包含一个属性,该属性由子类中的新属性隐藏但属性不同。反序列化时,我面临着问题。我不能在c#或json中更改属性的名称,但如果可能的话可以添加命名空间。
namespace xyz
{
public class A
{
public ICollection<xyz.OrganizationAttribute> OrganizationAttributes { get; set; }
}
}
namespace pqr
{
public class AX : A
{
public new ICollection<pqr.OrganizationAttribute> OrganizationAttributes { get; set; }
}
}
更新
JsonConvert.SerializeObject( axObject, new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.Objects,
ReferenceLoopHandling = ReferenceLoopHandling.Serialize,
MetadataPropertyHandling = MetadataPropertyHandling.ReadAhead,
DefaultValueHandling = DefaultValueHandling.Ignore
} );
JsonConvert.DeserializeObject<A>( "axjsonString", new JsonSerializerSettings
{
MetadataPropertyHandling = MetadataPropertyHandling.ReadAhead
} );
感谢任何帮助。感谢
答案 0 :(得分:0)
根据你在评论中所说的,没有办法让A类中的'pqr.OrganizationAttribute'与JSon或反序列化无关,这就是OOP的工作原理。隐藏类中的方法或字段会在继承层次结构中向下传播,因此在讨论A
时,您无法讨论像AX
这样的子项重新定义的字段。
您可以阅读有关此here
的更多信息修改强>
好吧,我现在得到了你想做的事。使用此:
public static A FromJson(string input)
{
var json = JToken.Parse(input);
json["OrganizationAttribute"].Remove();
return JsonConvert.DeserializeObject<A>(json.ToString());
}