2017-02-10 20 views
-1

Я пишу веб-api, используя мои существующие классы моделей и сервисы модели, которые используются многими другими приложениями, которые также нуждаются в полной демонстрации модели при сериализации. Могу ли я использовать один и тот же объект модели для веб-api и показывать только несколько полей.C# избегать сериализации дочерних свойств объекта вложенного класса

Я попытался использовать JsonContractResolver, но он не может сериализовать дочерние свойства в вложенном классе.

/*Model class*/ 
    public class A 
    { 
    public int A1 { get; set; } 
    public DateTime A2 { get; set; } 
    public List<B> A3 { get; set; } 
    } 
    public class B 
    { 
    public string B1 { get; set; } 
    public string B2 { get; set; } 
    public string B3 { get; set; } 
    } 

Ожидаемый результат: Когда метод веб-приложение получает элементы класса А, то она должна возвращать следующие JSON:

{"A1":1,"A2":"2017-02-10","A3":[{"B1":"test1","B2":"test2","B3":"test3"}]} 

Когда веб-апи получает член класса А, он должен возврат:

{"A1":1,"A3":[{"B1":"test1"}]} 

Просьба сообщить, какой должен быть наилучший подход.

+1

_ «используют один и тот же объект модели для Web API и выставить только несколько полей» _ - использование ViewModels, использовать анонимные типы или [ используйте собственный сериализатор для каждого приложения или конечной точки] (http://stackoverflow.com/questions/25157511/newtonsoft-add-jsonignore-at-runtime). Что показали ваши исследования? – CodeCaster

ответ

0

Каждый домен должен иметь свои собственные модели/классы. Веб-приложение должно иметь модель, которая предоставляет все поля, а веб-api должна иметь модель, которая предоставляет только часть поля.

namespace X.WebApp.Models { 

    public class A { 
     public int A1 { get; set; } 
      public DateTime A2 { get; set; } 
      public List<B> A3 { get; set; } 
    } 

    public class B { 
     public string B1 { get; set; } 
      public string B2 { get; set; } 
      public string B3 { get; set; } 
    } 
} 

namespace X.WebApi.Models { 

    public class A { 
     public int A1 { get; set; } 
      public List<B> A3 { get; set; } 
    } 

    public class B { 
     public string B1 { get; set; } 
    } 
} 

Эти модели могут быть построены из более общих моделей имен

namespace X.Common.Models { 

    public class A { 
     public int A1 { get; set; } 
      public DateTime A2 { get; set; } 
      public List<B> A3 { get; set; } 
     // More fields... 
    } 

    public class B { 
     public string B1 { get; set; } 
      public string B2 { get; set; } 
      public string B3 { get; set; } 
     // More fields... 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^