使用带有 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 的文件
在 ServiceStack 中,我如何使用外部发布的 JWT
为啥 UserAuthExtensions.PopulateFromMap(session, jwtPayload) 不能在 ServiceStack.Auth 中正确反序列化带有转义的 json 值
使用 Servicestack.Text 进行 XML 反序列化
pandas使用iloc函数将dataframe的所有数据行反序(reverse the order of rows in dataframe)