2013-07-14 19 views
1

我有一個不可變的對象,我使用servicestack的框架序列化爲json。現在我想將這個json字符串反序列化爲真實的對象。但我的對象是不可改變的。使用construtor反序列化json使用servicestack

有沒有辦法告訴servicestack json反序列化器使用構造函數?我不想在我的房產中添加公共設置。

我找到一種方法來使用Newtonking Json Deserializer,但是在那裏有一個相當於服務棧? http://james.newtonking.com/projects/json/help/index.html?topic=html/T_Newtonsoft_Json_JsonConstructorAttribute.htm

感謝

回答

2

我不知道一個簡單的配置,使這個的,但你可以寫一個自定義解串器很輕鬆地:

JsConfig<MyRequestClass>.DeSerializeFn = jsonString => { 
    var obj = JsonObject.Parse(jsonString); 
    return new MyRequestClass(obj.Get("PropertyA"), obj.Get("PropertyB"), ...); 
} 

更多信息,請參見this related answer

+0

感謝您的解決方案。我不喜歡這個想法重新映射我班的每個屬性。我不明白爲什麼要使用servicestack,使用ToJson()方法序列化我的不可變對象非常容易,但是當我想要反序列化它時,我需要手動映射每個屬性。我目前的解決方法是使用牛頓的json框架和JsonConstructor屬性 – Gui

+0

我認爲這裏的問題與[ServiceStack的設計理念](https://github.com/ServiceStack/ServiceStack/wiki/Advantages-of-基於消息的Web服務)。理想的做法是擁有專門爲您的請求/響應類設計的DTO類。因此,這裏的另一種方法是創建具有用於反序列化的可寫屬性的單獨類,然後將DTO對象映射到服務層的不可變對象。 –