2012-06-12 26 views
0

我想從一個方法我用下面的簽名ASP.NET MVC的WebAPI應用程序返回的結果:自定義類型在ASP.NET MVC序列化問題的WebAPI

public class Result 
{ 
    public int ResultCode { get; set; } 
    public MapFeatureViewModel Params { get; set; } 
    public string Message { get; set; } 
} 

和MapFeatureViewModel類型簽名是

public class MapFeatureViewModel 
{ 
    public long Id { get; set; } 
    public string Uuid { get; set; } 
    public string Feature { get; set; } 
    public long MapId { get; set; } 
} 

一切正常,到現在爲止;但如果嘗試將Result類中的Params類型更改爲「object」或「dynamic」以便將其用於所有其他方法,我會收到以下錯誤消息:

「您必須編寫一個屬性'type' ='object'在用本地名稱'__type'寫入屬性之後。「

任何想法如何使的WebAPI序列化非強類型的屬性?

+0

一般來說,ASP.Net的Web API使用強類型CLR對象作爲模型,但您可能反序列化JSON成C#動態對象。 –

回答

0

中現成格式化不知道如何處理動態或對象。但是,您可以創建自定義格式化程序(MediaTypeFormatter),使用自定義邏輯將其寫出。在格式化程序中,將「application/json」和「text/json」的MediaTypeHeaderValue實例添加到SupportedMediaTypes集合中。您還需要重寫CanWriteType以限制格式化程序僅適用於您正在序列化的類型,即MapFeatureViewModel。您需要將該格式化程序插入到該集合的開頭,以便與默認格式化程序相對運行。您可以通過訪問配置對象上的格式化程序集來完成此操作。

0

有幾個可供選擇的考慮。在Web API中,您可以使用強類型的CLR對象作爲模型,並且它們將自動序列化爲客戶端的XML或JSON。 visit for more info

但是,您可能反序列化JSON成C#動態對象。如何做到這一點,以及有關這個話題的好帖子。 visit for more info

+0

@Mahdi,對我的回答有任何反饋? –