如何在子类的某些属性上使用JavaScriptSerializer

时间:2011-05-06 09:25:42

标签: c# json serialization

我有一个继承自A类的B级。

Class B:A
{
   public string Prop1{get;set}
   public string Prop2{get;set}
   public string Prop3{get;set}
}

我想序列化(json)B类中的某些属性说prop1和prop2,而A类则没有。 我正在使用JavaScriptSerializer,这序列化了A和B. 我尝试将Recursion限制设置为1但是会引发错误。我不允许编辑A类

请帮忙

1 个答案:

答案 0 :(得分:5)

在这种情况下我会定义一个DTO类:

public class Foo
{
    public string Prop1 { get; set; }
    public string Prop2 { get; set; }
}

然后使用AutoMapperB实例映射到Foo。最后,我将JSON序列化Foo返回的AutoMapper实例。通过这种方式,我可以完全控制序列化的内容。

另一种可能性是使用匿名对象:

B b = ...
string json = new JavaScriptSerializer().Serialize(new 
{ 
    b.Prop1, b.Prop2 
});

或者如果您想在生成的JSON中重命名这些属性:

string json = new JavaScriptSerializer().Serialize(new 
{ 
    Foo = b.Prop1, 
    Bar = b.Prop2 
});