【问题标题】:deserialize json using construtor with servicestack使用带有 servicestack 的构造函数反序列化 json
【发布时间】:2013-07-12 14:46:38
【问题描述】:

我有一个不可变对象,我使用 servicestack 的框架将其序列化为 json。现在我想将此 json 字符串反序列化为真实对象。但我的对象是不可变的。

有没有办法告诉 servicestack json 反序列化器使用构造函数?我不想在我的属性中添加公共集。

我找到了一种使用 Newtonking Json Deserializer 的方法,但是在 servicestack 中是否有等价物? http://james.newtonking.com/projects/json/help/index.html?topic=html/T_Newtonsoft_Json_JsonConstructorAttribute.htm

谢谢

【问题讨论】:

    标签: c# servicestack


    【解决方案1】:

    我不知道有一个简单的配置可以启用此功能,但您可以轻松编写自定义反序列化器:

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

    请参阅this related answer 了解更多信息。

    【讨论】:

    • 感谢您的解决方案。我真的不喜欢重新映射班级的每个属性的想法。我不明白为什么使用 servicestack,使用 ToJson() 方法序列化我的不可变对象真的很容易,但是当我想反序列化它时,我需要手动映射每个属性。我目前的解决方法是使用带有 JsonConstructor 属性的 Newton 的 json 框架
    • 我认为这里的问题是与design philosophy of ServiceStack 冲突。理想的情况是拥有专门为您的请求/响应类设计的 DTO 类。因此,这里的另一种方法是创建具有可写属性的单独类以进行反序列化,然后将 DTO 对象映射到服务层的不可变对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    • 2016-09-25
    相关资源
    最近更新 更多