从 httpresponsemessage 中删除一些对象属性
remove some object properties from the httpresponsemessage
我有一个名为 CatalogSourceCodeItemsResponse 的 class。它是这样定义的:
public partial class CatalogSourceCodeItemsResponse
{
[System.Runtime.Serialization.OptionalFieldAttribute()]
private MMS.LoyaltyNext.API.SpendCard.MARSCatalog.CatalogFeed[] catalogFeedField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string endDateField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string sourceCodeField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string startDateField;
}
注意 我不能 modify/update class 因为它来自服务。
我创建了一个 Web api,它向服务发出请求,returns 这个 class 作为响应。我的要求是不需要返回所有属性,我只需要第一个。
这是 returns 响应的代码:
[HttpGet]
public HttpResponseMessage GetCatalogItems()
{
CatalogSourceCodeItemsResponse response = new CatalogSourceCodeItemsResponse();
response = //logic to return the response from the service
return Request.CreateResponse<CatalogSourceCodeItemsResponse>(HttpStatusCode.OK, response);
}
当前输出为
{
"catalogFeed" : null,
"endDate" : null,
"sourceCode" : null,
"startDate" : null
}
要求的输出是
{
"catalogFeed" : null
}
我怎样才能做到这一点?
您可以使用 ViewModel。
视图模型仅表示您要在 view/page 上显示的数据,无论是用于静态文本还是用于输入值(如文本框和下拉列表)。
public partial class CatalogSourceCodeItemsResponse
{
[System.Runtime.Serialization.OptionalFieldAttribute()]
private MMS.LoyaltyNext.API.SpendCard.MARSCatalog.CatalogFeed[] catalogFeedField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string endDateField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string sourceCodeField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string startDateField;
}
视图模型与域模型的不同之处在于,视图模型仅包含您要在视图中使用的数据(由属性表示)。例如,假设您只想显示 CatalogSourceCodeItemsResponse 记录中的一项,您的视图模型可能如下所示:
public class CatalogSourceCodeItemsResponseViewModel
{
private MMS.LoyaltyNext.API.SpendCard.MARSCatalog.CatalogFeed[] catalogFeedField; { get; set; }
}
那么你的控制器动作会变成
[HttpGet]
public HttpResponseMessage GetCatalogItems()
{
CatalogSourceCodeItemsResponse response = new CatalogSourceCodeItemsResponse();
response = //logic to return the response from the service
CatalogSourceCodeItemsResponseViewModel responseViewModel=new CatalogSourceCodeItemsResponseViewModel();
responseViewModel.catalogFeedField=response.catalogFeedField;
return Request.CreateResponse<CatalogSourceCodeItemsResponseViewModel>(HttpStatusCode.OK, responseViewModel);
}
我有一个名为 CatalogSourceCodeItemsResponse 的 class。它是这样定义的:
public partial class CatalogSourceCodeItemsResponse
{
[System.Runtime.Serialization.OptionalFieldAttribute()]
private MMS.LoyaltyNext.API.SpendCard.MARSCatalog.CatalogFeed[] catalogFeedField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string endDateField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string sourceCodeField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string startDateField;
}
注意 我不能 modify/update class 因为它来自服务。
我创建了一个 Web api,它向服务发出请求,returns 这个 class 作为响应。我的要求是不需要返回所有属性,我只需要第一个。
这是 returns 响应的代码:
[HttpGet]
public HttpResponseMessage GetCatalogItems()
{
CatalogSourceCodeItemsResponse response = new CatalogSourceCodeItemsResponse();
response = //logic to return the response from the service
return Request.CreateResponse<CatalogSourceCodeItemsResponse>(HttpStatusCode.OK, response);
}
当前输出为
{
"catalogFeed" : null,
"endDate" : null,
"sourceCode" : null,
"startDate" : null
}
要求的输出是
{
"catalogFeed" : null
}
我怎样才能做到这一点?
您可以使用 ViewModel。
视图模型仅表示您要在 view/page 上显示的数据,无论是用于静态文本还是用于输入值(如文本框和下拉列表)。
public partial class CatalogSourceCodeItemsResponse
{
[System.Runtime.Serialization.OptionalFieldAttribute()]
private MMS.LoyaltyNext.API.SpendCard.MARSCatalog.CatalogFeed[] catalogFeedField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string endDateField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string sourceCodeField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string startDateField;
}
视图模型与域模型的不同之处在于,视图模型仅包含您要在视图中使用的数据(由属性表示)。例如,假设您只想显示 CatalogSourceCodeItemsResponse 记录中的一项,您的视图模型可能如下所示:
public class CatalogSourceCodeItemsResponseViewModel
{
private MMS.LoyaltyNext.API.SpendCard.MARSCatalog.CatalogFeed[] catalogFeedField; { get; set; }
}
那么你的控制器动作会变成
[HttpGet]
public HttpResponseMessage GetCatalogItems()
{
CatalogSourceCodeItemsResponse response = new CatalogSourceCodeItemsResponse();
response = //logic to return the response from the service
CatalogSourceCodeItemsResponseViewModel responseViewModel=new CatalogSourceCodeItemsResponseViewModel();
responseViewModel.catalogFeedField=response.catalogFeedField;
return Request.CreateResponse<CatalogSourceCodeItemsResponseViewModel>(HttpStatusCode.OK, responseViewModel);
}