ServiceStack.Text JsonObject和Arrays

时间:2016-01-17 13:53:43

标签: c# json servicestack-text

我有以下代码,其中ServiceStack.Text使实际应该是数组的对象成为字符串。

var json1 = "{\"x\": [1, 2, 3]}";
var o1 = JsonSerializer.DeserializeFromString<JsonObject>(json1);
var isString1 = o1["x"].GetType() == typeof(string); // Why string and not an array?

var json2 = "{\"x\": [{ \"a\" : true}]}";
var o2 = JsonSerializer.DeserializeFromString<JsonObject>(json2);
var isString2 = o1["x"].GetType() == typeof(string); // Why string and not an array?

我该怎么做才能成为阵列?如何访问数组内容?

1 个答案:

答案 0 :(得分:1)

ServiceStack.Text.JsonObject是一个Dictionary<string, string>,因此它不会按预期行动。

public class JsonObject : Dictionary<string, string>

反序列化工作不是猜测你的目标类型,它假设你知道结构,并假设它正是这样才能使它成为你想要的 Type

您不能将2个不同的json结构反序列化为同一个对象。

以下内容适用于第一个例子:

var o1 = JsonSerializer.DeserializeFromString<Dictionary<string, int[]>>

第二个例子应该有不同的类型,以下内容可行,但我建议你为它编写一个特定的类模型,以下是非常一般的:

var o2 = JsonSerializer.DeserializeFromString<Dictionary<string, Dictionary<string, bool>[]>>(json2);