2014-08-27 34 views
0

我在C#中的POCO類,它表示一個JSON對象:代表JSON的強類型POCO

public int id {get; set;} 
public string name {get; set;} 
public string description {get; set;} 

JSON

{ 
    "id" : 1, 
    "name" : "name", 
    "description" : "description" 
} 

現在JSON將會添加這些屬性:

{ 
    "property_1" : "value_1", 
    "property_2" : "value_2", 
    "property_3" : "value_3" 
//etc 
} 

可能只有0個屬性和儘可能多的需要,但他們都會被命名爲property_和一個數字。 因此,對於該類我想有一些一List<>排序而不是硬編碼單獨的每個屬性,但接着又返回Json對象(我使用MVC)我想拆分成List<>單個對象,我該怎麼辦那?

而是具有:

return Json(property_1, property_2, property_3); 

我想:

return Json(properties.Split()); 
+0

只是好奇,你爲什麼不使用集合/名稱 - 值對這些,無論是作爲服務器端對象,並表示爲JSON? – 2014-08-27 18:57:57

+0

@ Moby'sStuntDouble json對象正在被web服務使用,這就是它的屬性設置,我無法控制它。 – SOfanatic 2014-08-27 18:59:36

+2

請從我這裏以您的名義拍拍網絡服務的人:) – 2014-08-27 19:03:38

回答

3

如果您使用Json.NET您的JSON序列化,你可以使用[JsonExtensionData]屬性捕捉到你沒有的屬性編碼。從Json.NET 5.0.8開始,此屬性影響序列化和反序列化,以確保您的POCO對象支持往返。

在實踐中,我在我所有的模型類都源自一個抽象基類放置該屬性的一個字段:

ExtensibleJsonObject

+0

這是非常有趣的!它應該開放一些Interresting的可能性。謝謝! ;) – Mithon 2014-08-27 19:23:42

1

您可以編寫自己的自定義MediaTypeFormatter並將其插入到您的標準JsonFormatter前的HttpConfiguration.Formatters集合,或者擴展標準JSONFormatter並完全替換它。 (我建議前者)。

MediaTypeFormatters可以讓你訪問原始數據流,因爲它正在進入,你可以使用所有的JSON.NET在這一點上做任何你想要的序列化和反序列化。