ServiceStack反序列化Json(带类型)到特定类型的列表
ServiceStack Deserialize Json (with types) to List of specific type
我有这个 json:
{
"$type": "System.Collections.Generic.List<MyType>",
"$values": [
{
"$type": "MyType",
"o": 7.54,
"t": 1619002800000,
"n": 3
},
{
"$type": "MyType",
"o": 7.53,
"t": 1619005140000,
"n": 3
}
]
}
我想将它反序列化回 List<MyType>
。我认为有一种简单的方法可以做到这一点:
var myList = json.FromJson<MyType>();
但这不起作用。
我找到了实现目标的方法,但有点乱,所以我想知道是否有更好的方法,但我不知道。这是我想出的乱七八糟的方法:
var myListOfObject = (List<object>)((Dictionary<string, object>)JSON.parse(json))["$values"];
var myTypes = myListOfObject.ConvertAll(x => JSON.stringify(x).FromJson<MyType>());
我不一定要寻找更少的代码行,因为 2 没有什么可抱怨的。我只是希望有一种方法不需要所有的转换和解析,而是可以按原样接受 json 并将其恢复为它来自的类型。也许我什至可以设置一个参数来告诉它在反序列化期间验证类型,因为完整的类型名称在 json.
您应该使用与序列化负载相同的序列化器来反序列化它。 ServiceStack.Text 使用 __type
将其类型信息嵌入到不同的模式中,因此您将无法使用 ServiceStack.Text 将其自动反序列化为嵌入类型。
这可能使用了 JSON.NET,您应该使用它来反序列化它,否则是的,您可以使用 ServiceStack 的 JS Utils 来反序列化任意 JSON。
我有这个 json:
{
"$type": "System.Collections.Generic.List<MyType>",
"$values": [
{
"$type": "MyType",
"o": 7.54,
"t": 1619002800000,
"n": 3
},
{
"$type": "MyType",
"o": 7.53,
"t": 1619005140000,
"n": 3
}
]
}
我想将它反序列化回 List<MyType>
。我认为有一种简单的方法可以做到这一点:
var myList = json.FromJson<MyType>();
但这不起作用。
我找到了实现目标的方法,但有点乱,所以我想知道是否有更好的方法,但我不知道。这是我想出的乱七八糟的方法:
var myListOfObject = (List<object>)((Dictionary<string, object>)JSON.parse(json))["$values"];
var myTypes = myListOfObject.ConvertAll(x => JSON.stringify(x).FromJson<MyType>());
我不一定要寻找更少的代码行,因为 2 没有什么可抱怨的。我只是希望有一种方法不需要所有的转换和解析,而是可以按原样接受 json 并将其恢复为它来自的类型。也许我什至可以设置一个参数来告诉它在反序列化期间验证类型,因为完整的类型名称在 json.
您应该使用与序列化负载相同的序列化器来反序列化它。 ServiceStack.Text 使用 __type
将其类型信息嵌入到不同的模式中,因此您将无法使用 ServiceStack.Text 将其自动反序列化为嵌入类型。
这可能使用了 JSON.NET,您应该使用它来反序列化它,否则是的,您可以使用 ServiceStack 的 JS Utils 来反序列化任意 JSON。