所以我有一個型號Subscription
從Azure的TableEntity
類繼承使用的的WebAPI獲取方法如下:防止Azure的TableEntity財產正在連載中的MVC 4的WebAPI
[HttpGet]
public IEnumerable<Subscription> Subscribers()
在這種方法中,我做了在我的用戶表Select
查詢查找所有用戶,但我只想要回一些列(屬性)如下:
var query = new TableQuery<Subscription>().Select(new string[] {
"PartitionKey",
"RowKey",
"Description",
"Verified"
});
該模型的定義如下:
public class Subscription : TableEntity
{
[Required]
[RegularExpression(@"[\w]+",
ErrorMessage = @"Only alphanumeric characters and underscore (_) are allowed.")]
[Display(Name = "Application Name")]
public string ApplicationName
{
get
{
return this.PartitionKey;
}
set
{
this.PartitionKey = value;
}
}
[Required]
[RegularExpression(@"[\w]+",
ErrorMessage = @"Only alphanumeric characters and underscore (_) are allowed.")]
[Display(Name = "Log Name")]
public string LogName
{
get
{
return this.RowKey;
}
set
{
this.RowKey = value;
}
}
[Required]
[EmailAddressAttribute]
[Display(Name = "Email Address")]
public string EmailAddress { get; set; }
public string Description { get; set; }
public string SubscriberGUID { get; set; }
public bool? Verified { get; set; }
}
以下是API查詢XML響應:
<ArrayOfSubscription>
<Subscription>
<ETag>W/"datetime'2013-03-18T08%3A54%3A32.483Z'"</ETag>
<PartitionKey>AppName1</PartitionKey><RowKey>Log1</RowKey>
<Timestamp>
<d3p1:DateTime>2013-03-18T08:54:32.483Z</d3p1:DateTime>
<d3p1:OffsetMinutes>0</d3p1:OffsetMinutes>
</Timestamp>
<ApplicationName>AppName1</ApplicationName>
<Description>Desc</Description>
<EmailAddress i:nil="true"/>
<LogName>Log1</LogName>
<SubscriberGUID i:nil="true"/>
<Verified>false</Verified>
</Subscription>
</ArrayOfSubscription>
正如你可以看到,該模型不僅擁有一些額外的屬性,如SubscriberGUID
我不想被序列化響應(並且由於它們不是在選擇的查詢,它們是空反正),但TableEntity本身具有諸如PartitionKey
,RowKey
,Etag
,並Timestamp
其也被序列化領域。
我如何繼續使用Azure的表,但避免在響應序列化這些不希望的領域,我不希望用戶看到。
這和我所做的唯一區別是DTO繼承自TableEntity,這是我需要爲了與Azure存儲表集成。 – 2013-03-19 02:43:59
我沒有看到DTO繼承後端實體對象的原因。你應該有兩種類型代表你的表的模型類型,在你的情況下'訂閱',它繼承'TableEntity'。然後,您將擁有一個'SubscriptionDto',它不得繼承'TableEntity'並且包含您想通過您的Web API公開的字段/屬性。 – 2013-03-19 18:05:59