2015-06-03 15 views
3

我有一個模型說我們如何隱藏WebAPI中的一個屬性?

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

你見過http://stackoverflow.com/questions/19698844/how-to-use-shouldserializemembername-method-for-a-property-of-type-object –

回答

11

我只是想出了

[IgnoreDataMember] 
public int DeviceId { get; set; } 

的命名空間是System.Runtime.Serialization

更多信息IgnoreDataMemberAttribute Class

學到新的東西今天。

謝謝大家。

1

在屬性頂部使用屬性[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; }   
} 
+0

嗨,我只是想通了[IgnoreDataMember] –

2

對所有GET/POST請求使用視圖模型都有很好的做法。 在你情況下,你應該在POST接收數據的創建類:

public class InsertDeviceViewModel 
{   
    public string DeviceTokenIds { get; set; } 
    public byte[] Data { get; set; } 
    public string FilePwd { get; set; }   
} 

,然後從視圖模型數據映射到你的商業模式Device