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。