2012-09-17 37 views
4

我有一個List<>的對象。他們的類沒有'顏色'屬性(String) - 但我可以在序列化之前爲每個列表元素派生此屬性的值。可能將屬性添加到我的課程的JSON版本中,但它不存在於課程中?

將此屬性包含在JSON對象中以將其添加到類然後序列化整個事物的唯一方法是?

或者有沒有一種方法來添加一個屬性,該屬性需要出現在JSON對象中,否則在我的類中將會非常無用?

我知道這是可能的各種字符串操作方法,但它不覺得正確做到這一點。

我正在使用DataContractJsonSerializer

回答

3

您可以創建一個data contract surrogate,它將您的類的實例透明地替換爲另一個類的實例。這個新班級可以看起來像任何東西,但在你的情況下,它只會有額外的Colour屬性。

這裏的好處是你保留了列表項的原始類型;代理在序列化過程中被創建,您現有的代碼根本不需要觸摸它們。

+0

我認爲這幾乎是我所追求的。非常感謝喬恩。 –

1

我建議你可以創建一個新的類,它繼承自你的對象列表,並在主體類中添加了無用的字符串。

創建JSON時,只需使用派生類,它將包含添加的字符串值並繼承原始對象中的所有其餘數據。

+0

不錯的建議。沒想到這一點。但我想我要避免的是冗餘和存儲過多的數據 - 而且我不僅要存儲對我的類不必要的屬性(按照我提出的方式進行),而且還以您的方式進行存儲整個額外的課程。 +1。 –

+0

是的......但是如果你不想直接操縱JSON字符串,並且你不想通過創建一個新類來實現「優雅的方式」......還有什麼方法可以解決你的問題? Afaik在創建JSON對象後無法操縱JSON對象,並且如果可能的話,您將面臨完全相同的問題,因爲您的JSON對象將被加載到內存中,並且「垃圾」數據將被存儲在其中。 – Bardo

+0

嗯...不知道替代,我剛剛收到喬恩的帖子。它看起來非常好。 – Bardo