使用带有 servicestack 的构造函数反序列化 json

Posted

技术标签:

【中文标题】使用带有 servicestack 的构造函数反序列化 json【英文标题】:deserialize json using construtor with servicestack 【发布时间】: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

谢谢

【问题讨论】:

【参考方案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 对象映射到服务层的不可变对象。

以上是关于使用带有 servicestack 的构造函数反序列化 json的主要内容,如果未能解决你的问题,请参考以下文章

从 multipart/form-data 接收带有 servicestack 的文件

带有 IIS 7.5 的 ServiceStack

在 ServiceStack 中,我如何使用外部发布的 JWT

为啥 UserAuthExtensions.PopulateFromMap(session, jwtPayload) 不能在 ServiceStack.Auth 中正确反序列化带有转义的 json 值

使用 Servicestack.Text 进行 XML 反序列化

pandas使用iloc函数将dataframe的所有数据行反序(reverse the order of rows in dataframe)