[英]Web API filtering model properties
對於我的ASP.NET MVC Web服務,我有一個返回為JSON對象的模型。 現在,我的模型中有一些我不想返回的屬性。
示例模型:
class Account {
public int ID { get; }
public string Username { get; }
public string Password { get; }
//... more properties
}
假設我只想將ID
和Username
屬性返回為JSON。 我正在尋找一種僅過濾這些屬性的好方法。 更改訪問修飾符不是我的選擇。
我能想到的解決方案是創建一個如下所示的白名單。 在這里,我添加了DisplayName
,可以自定義它是一件不錯的事情,但這不是必需的。
class FilterProperty
{
public string PropertyName { get; }
public string DisplayName { get; }
public FilterProperty(string propertyName, string displayName)
{
PropertyName = propertyName;
DisplayName = displayName;
}
}
class Account
{
public static FilterProperty[] Whitelist = {
new FilterProperty("ID", "accountId"),
new FilterProperty("Username", "accountName")
};
//...
}
該解決方案的缺點是:如果我要更改屬性的名稱,則也需要更改白名單。
我可以做這項工作還是有更好的解決方案?
您的問題可能有多種解決方案:
創建一個僅具有必需屬性的ViewModel,然后從原始模型映射這些屬性,然后返回該viewModel。 您可以使用AutoMapper庫將原始模型映射到您的視圖模型。
另一件事是ASP.NET Web API使用Json.Net作為默認格式器,因此,如果您的應用程序僅使用JSON作為數據格式,則可以使用[JsonIgnore]忽略序列化屬性:
class Account {
public int ID { get; }
public string Username { get; }
[JsonIgnore]
public string Password { get; }
//... more properties
}
希望這對您有所幫助。
Web API使用JSON.net作為默認序列化程序。
您可以添加JSONIgnore屬性以跳過屬性。
public class Class
{
// included in JSON
public string Model { get; set; }
public DateTime Year { get; set; }
public List<string> Features { get; set; }
// ignored
[JsonIgnore]
public DateTime LastModified { get; set; }
}
另外,如果您需要忽略大多數屬性,則可以使用opt in方法。
在類上使用DataContract屬性,然后將Datamember僅添加到要包括的屬性中
[DataContract]
public class Class
{
[DataMember]
public string Model { get; set; }
[DataMember]
public DateTime Year { get; set; }
// ignored
public List<string> Features { get; set; }
public DateTime LastModified { get; set; }
}
如果只考慮命名,則使用nameof運算符是一種選擇。 (取決於.NET版本)
class Account
{
public static FilterProperty[] Whitelist = {
new FilterProperty(nameof(Account.ID), "accountId"),
new FilterProperty(nameof(Account.Username), "accountName")
};
//...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.