2016-03-04 5 views
2

У меня есть следующий интерфейс:класса от базового класса с нулевыми свойствами

public interface IResponse<T> { 
    IList<Error> Errors { get; } 
    IPaging Paging { get; } 
    IList<T> Result { get; }  
} 

И в ее реализации:

public class Response<T> : IResponse<T> { 

    IList<Error> Errors { get; private set; } 
    public IPaging Paging { get; private set; } 
    public IList<T> Result { get; private set; } 

    public Response(IList<T> result, IPaging paging, IList<Error> errors) { 
    Errors = errors; 
    Paging = paging; 
    Result = result; 
    } 

} 

Так я использую его следующим образом:

Response<MyModel> response = new Response<MyModel>(); 

В в некоторых ситуациях мне нужно создать ответ, в котором у меня нет T и пейджинга, а результат - null ... Они ноль, но все еще существуют в o ▪ Таблица.

Response response = new Response(); 

С чем он у меня привычка это работа (я думаю, что в этих случаях не существует модель.):

Response<?> response = new Response<?>(); 

Причина этого заключается в том, что я буду преобразовать ответ в формате JSON и I по-прежнему требуется пейджинг и результат.

Каков наилучший способ для этого?

+6

'новый ответ (NULL, NULL, NULL)'? Или укажите пустые списки и «нулевой объект», который реализует «IPaging». Не совсем понятно, что вы подразумеваете под «они ноль, но все еще существуют в объекте». –

+0

«они ноль, но все еще существуют в классе» ... Поэтому, когда я преобразовываю в Json, как пейджинг, так и результат по-прежнему отображаются как свойства, но null. –

+6

Если свойства не отображаются на вашем выходе, вам, вероятно, необходимо настроить параметры сериализации JSON, чтобы всегда включать в себя значения null. Предполагая, что вы используете Newtonsoft: http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_NullValueHandling.htm – xDaevax

ответ

1

Вам не нужно вносить какие-либо изменения кода для вашей модели, если вы используете Newtonsoft для сериализации, вы можете сделать что-то вроде следующего:

void Main() { 
    Response<MyResponse> myResponse = new Response<MyResponse>(new List<MyResponse>(), null, null); 
    var serializer = new JsonSerializer(); 
    StringBuilder sb = new StringBuilder(); 

    using(var writer = new StringWriter(sb)) { 
     using (var jWriter = new JsonTextWriter(writer)) { 
      serializer.NullValueHandling = NullValueHandling.Ignore; 
      serializer.Serialize(jWriter, myResponse); 
     } 
    } 

    Console.WriteLine(sb.ToString()); 
} 

public interface IResponse<T> { 
    IList<Error> Errors { get; } 
    IPaging Paging { get; } 
    IList<T> Result { get; }  
} 

public class Response<T> : IResponse<T> { 

    public IList<Error> Errors { get; private set; } 
    public IPaging Paging { get; private set; } 
    public IList<T> Result { get; private set; } 

    public Response(IList<T> result, IPaging paging, IList<Error> errors) { 
    Errors = errors; 
    Paging = paging; 
    Result = result; 
    } 

} 

public class Error { 


} 

public interface IPaging { 

} 

public class MyResponse { 
    public string Name {get; set;} 
} 

Выполнение вышеуказанных результатов кода в следующих выходных :

{"Result":[]} 

изменяя настройки сериализатора на этой линии:

serializer.NullValueHandling = NullValueHandling.Ignore; 

к

serializer.NullValueHandling = NullValueHandling.Include; 

Результат будет выглядеть так:

{"Errors":null,"Paging":null,"Result":[]} 
Смежные вопросы