我想在C#環境中使用Nancy FX創建REST服務。我可以很容易地做一個Response.AsJson,它看起來很好。但我希望響應可以省略任何空值的屬性。在Nancy FX中忽略JSON響應中的空值
我還沒有弄清楚如何做到這一點呢。
有人能指向我的某個幫助文檔或博客文章,解釋如何做到這一點。
感謝, JP
我想在C#環境中使用Nancy FX創建REST服務。我可以很容易地做一個Response.AsJson,它看起來很好。但我希望響應可以省略任何空值的屬性。在Nancy FX中忽略JSON響應中的空值
我還沒有弄清楚如何做到這一點呢。
有人能指向我的某個幫助文檔或博客文章,解釋如何做到這一點。
感謝, JP
我會創造一個充滿活力的匿名類型並返回。因此,讓我們假設你有一個User
對象是這樣的:
public class User
{
public string Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
你要傳回這種類型的JSON響應的實例,所以你將有一些像這樣的代碼:
Get["/user/{userid}"] = parameters =>
{
var user = UserService.GetById(Db, (string)parameters.userid);
if (user == null) return HttpStatusCode.UnprocessableEntity;
return Response.AsJson(user);
};
但你不想返回User
實例,而是希望返回一個dynamic
類型的單獨實例,該實例只會在給定實例的屬性值不是null
的情況下實現屬性。
所以我建議代碼是這樣的:
Get["/user/{userid}"] = parameters =>
{
var user = UserService.GetById(Db, (string)parameters.userid);
if (user == null) return HttpStatusCode.UnprocessableEntity;
dynamic userDTO = new ExpandoObject();
userDTO.Id = user.Id;
if (!string.IsNullOrEmpty(user.FirstName)) userDTO.FirstName = user.FirstName;
if (!string.IsNullOrEmpty(user.LastName)) userDTO.Lastname = user.LastName;
return Response.AsJson((ExpandoObject)userDTO);
};
注1 你並不需要測試的Id
,因爲這是由User
實例從數據庫中成功返回暗示。
注2 你需要使用一個dynamic
類型,因此您可以包括特設性能。問題是擴展方法不能接受動態類型。爲了避免這種情況,您需要將其聲明爲ExpandoObject
,但將其用作動態。這個技巧會產生一個處理開銷,但它允許您在將動態傳遞給AsJson()
擴展方法時將動態轉換爲ExpandoObject
。