类具有空属性
问题描述:
我有以下接口:类具有空属性
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和分页和结果为空...他们是空的,但仍然存在于o bject。
Response response = new Response();
随着我有什么不会的工作(我认为在这些情况下,有没有一种模式。):
Response<?> response = new Response<?>();
这样做的原因是,我会响应转换成JSON和我仍然希望Paging和Result出现。
这样做的最好方法是什么?
答
你不应该需要做任何代码更改机型,如果你正在使用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":[]}
'新的响应
“他们是空的,但仍然存在于类”...因此,当我转换为Json时,分页和结果仍然显示为属性,但为空。 –
如果属性未显示在输出中,则可能需要将JSON序列化设置调整为始终包含空值。假设你正在使用Newtonsoft:http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_NullValueHandling.htm – xDaevax