как использовать JavaScriptSerializer для определенных свойств дочернего класса

#c# #json #serialization

#c# #json #сериализация

Вопрос:

У меня есть класс B, который наследуется от класса A.

 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.
Я попытался установить предел рекурсии равным 1, но это выдает ошибку. Мне не разрешено редактировать класс A

Пожалуйста, помогите

Ответ №1:

В этом случае я бы определил класс DTO:

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

затем используйте AutoMapper для сопоставления B экземпляра с 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 
});