c# - 用 Servicestack.Text 重构类型对象的属性

标签 c# json servicestack

我正在使用 Servicestack.Text 包将对象序列化和反序列化到 JSON 或从中反序列化。我的一个对象具有对象类型 (System.Object) 的属性。它是以下三种类型之一:long、double、string。但是,当我使用 JsonSerializer.DeserializeFromString 时,它总是反序列化为字符串。我需要将它反序列化为序列化时的类型。我尝试将类型信息包含在 JsConfig.IncludeTypeInfo = true;但是,这似乎只适用于类级别,而不适用于属性级别。我该如何进行这项工作?

最佳答案

这在 ServiceStack JSON Serializer 中不受支持它会查看反序列化为的目标类型,以获取有关如何强制转换 JSON 值的信息。

因为您使用的是 object 属性,所以没有类型信息,因此它会回退并查找是否存在此信息的 __type 属性,但 ServiceStack 从不发出__ValueTypes 的类型信息,因为它会大大增加负载。

在没有类型信息的情况下,序列化程序只是将值保留为字符串,它是一个对象。

我建议避免使用接口(interface)、后期绑定(bind)对象类型等 bad idea to have on DTOs ,但是为此您可以创建一个扩展方法来检查字符串值并根据内容返回正确类型的实例,例如:

var dto = new WildCard { AnyObject = 1 };

dto.AnyObject.AsJsonValue(); //Extension method that

"1" -> int 1
"true" -> bool true
"anything else" -> string "anything else"

唯一的问题是无法发送包含数字或 bool 值的字符串文字,因为它总是被强制转换为各自的类型。

关于c# - 用 Servicestack.Text 重构类型对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14531815/

相关文章:

c# - 每次 Controller 方法结束时调用方法

c# - 为什么 Java 和 C# 没有到 boolean 值的隐式转换?

php - 如何在 php 中使用正则表达式 (regex) 从 json 获取内容

redis - 如何从redis中的哈希中获取与特定模式匹配的所有键?

asp.net - ServiceStack 示例应该以什么顺序进行处理?

java - 在 Camera2 api 上使用 captureBurst 时 JPEG 回调超时

javascript - 如何在 CheckboxList selectedIndexChange 上显示确认框?

c# - 无法在 .NET 中反序列化 JSON 字符串

javascript - 将数据发布到 JsonP

c# - servicestack.razor 中的身份验证