我有一个模型说
public class Device
{
public int DeviceId { get; set; }
public string DeviceTokenIds { get; set; }
public byte[] Data { get; set; }
public string FilePwd { get; set; }
}
现在我有一个ASP.net Web API,其中有一个POST方法,如
[HttpPost]
[Route("AddDeviceRegistrations")]
public void InsertDeviceRegistrations(Device device)
如果我公开WebAPI,显然所有字段都可用,例如
{
"DeviceId": 1,
"DeviceTokenIds": "sample string 2",
"Data": "QEBA",
"FilePwd": "sample string 3"
}
我想要的是,每当我公开我的WebAPI时,DeviceID都不会暴露。我的意思是我在寻找
{
"DeviceTokenIds": "sample string 2",
"Data": "QEBA",
"FilePwd": "sample string 3"
}
有可能吗?如果是这样的话?
我可以通过将函数签名更改为
来解决问题public void InsertDeviceRegistrations(string deviceTokenIds, byte[] data, string FilePwd).
但我想知道它是否可能? 如果是这样,怎么样?
提前致谢。
答案 0 :(得分:18)
我刚想通了
[IgnoreDataMember]
public int DeviceId { get; set; }
命名空间为System.Runtime.Serialization
更多信息IgnoreDataMemberAttribute Class
今天学到了新的东西。
全部谢谢。
答案 1 :(得分:2)
将View Models用于所有GET / POST请求是一种很好的做法。 在这种情况下,您应该创建用于在POST中接收数据的类:
public class InsertDeviceViewModel
{
public string DeviceTokenIds { get; set; }
public byte[] Data { get; set; }
public string FilePwd { get; set; }
}
然后将数据从视图模型映射到业务模型Device
。
答案 2 :(得分:1)
在Property的顶部使用Attribute [NonSerialized]会阻止它在输出JSON / XML中被序列化。
public class Device
{
[NonSerialized]
public int DeviceId { get; set; }
public string DeviceTokenIds { get; set; }
public byte[] Data { get; set; }
public string FilePwd { get; set; }
}
答案 3 :(得分:1)
如果要使用null参数隐藏Resonse类的数据成员。转到位于App_start文件夹中的项目WebApiConfig文件,添加以下代码:
var jsonConfig = config.Formatters.JsonFormatter;
jsonConfig.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
答案 4 :(得分:0)
如果您使用的是Newtonsoft.Json
您可以这样隐藏属性:
public class Product
{
[JsonIgnore]
public string internalID { get; set; };
public string sku { get; set; };
public string productName { get; set; };
}
,并且您的序列化响应将不包含internalID属性。