我有以下代码,其中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?
我该怎么做才能成为阵列?如何访问数组内容?
答案 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);