我有以下DTO如何將JsonObject實例轉換/反序列化爲具體類?
public class Foo
{
public ServiceStack.Text.JsonObject Bar { get; set; }
}
Foo.Bar
可以是一出其他3個DTO的
某處在我的代碼,我想映射/轉換/反序列化Foo.Bar
到具體的DTO(我知道ServiceStack.Text.JsonObject
工具System.Collection.Generic.Dictionary<string, string>
- 有趣的是,作爲非字符串傳輸的值,以字符串形式進入我的ServiceStack.Text.JsonObject
-實例)。
所以我試圖
ServiceStack.Text.JsonExtensions.JsonTo<ConcreteDTO>(foo.Bar, ???)
,但它需要一個鍵選擇作爲第二個參數 - 但我不希望將單個值,而我會去爲整個實例。
我也知道有ServiceStack.Text.JsonExtensions.ConvertTo<T>(JsonObject jsonObject, Func<JsonObject, T> convertFn)
,但我不想轉換手動編碼的jsonObject。
那麼,我該如何解決這個問題呢?
編輯:
只是要清楚 - 我不想去的彎路和序列化JsonObject
-instance爲JSON字符串只是爲了反序列化...有來自JsonObject
任何直接的反序列化選項?
似乎這不是一個非常好的選擇。每次獲得新的具體類型時,都必須添加另一個案例選項。 – ant 2012-11-01 20:21:05
@ant但是這就是工廠/映射器的情況 - 你有什麼其他的機會?鏈接必須知道*某處*,並且每當您引入一個新類型時,您都必須在某處調整* ...如果您爲此註冊表:某些註冊表調用...如果您創建數組與鍵=類型和值=工廠方法:某處是'push'調用...在我的情況下主要問題是:我正在處理'enums' - 如果我有類/複雜類型我可以介紹一些'抽象'/'虛擬'屬性來實現這個工廠......但我正在處理價值......悲傷但真實...... – 2012-11-02 06:50:34
10年後 - 總結 - 你應該使用策略模式方法...... – 2016-05-18 15:56:02