我不会介绍我尝试过的所有事情……
这大约是我想要完成的.
public interface IClientDTO {
string FirstName { get; }
string LastName { get; }
}
public class DTO : IClientDTO {
public string FirstName { get; set; }
public string LastName { get; set; }
public string SSN { get; set; }
}
class Program {
static void Main(string[] args) {
DTO dto = new DTO() { FirstName = "John", LastName = "Doe", SSN = "111001111" };
IClientDTO clientDTO = dto;
string sDTO = JsonConvert.SerializeObject(dto);
string sClientDTO = JsonConvert.SerializeObject(clientDTO);
Debug.WriteLine(sDTO);
Debug.WriteLine(sClientDTO);
}
}
我希望我的输出看起来像这样……
{“SSN”:”111001111″,”FirstName”:”John”,”LastName”:”Doe”}
{“FirstName”:”John”,”LastName”:”Doe”}
我认为这不会那么困难,但由于Serializer总是将类型确定为DTO,因此即使在我不想要的情况下也总是得到SSN值.
这当然只是一个小测试.可以说我有一个WebAPI应用程序模拟了这样的东西.
public class AdminController : ApiController {
public DTO Get() { return new Model().DTO); }
}
public class ClientController : ApiController {
public IClientDTO Get() { return new Model().DTO); }
}
我希望Serializer只序列化返回类型中定义的那些项.
最佳答案 您可以使用JsonIgnoreAttribute始终不包含SSN.
public class DTO : IClientDTO {
public string FirstName { get; set; }
public string LastName { get; set; }
[JsonIgnore]
public string SSN { get; set; }
}
如果您想以编程方式确定天气是否包含它,您可以创建两个类 – 具有FirstName,LastName等的基本ClientDTO.然后是ClientWithSSN类型,它继承自ClientDTO并且仅包含SSN.然后,当选择是否返回SSN时,转换为没有ssn的基本类型或返回实际的ClientWithSSN类型.