如何使用命名空间将c#对象序列化为Json。如果可能的话

时间:2016-11-13 11:32:40

标签: c# json json.net

基类包含一个属性,该属性由子类中的新属性隐藏但属性不同。反序列化时,我面临着问题。我不能在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
    } );

感谢任何帮助。感谢

1 个答案:

答案 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());
}