无法以字符串格式从JSON创建JSON值

时间:2013-05-23 14:32:52

标签: c# json servicestack

我有以下对象:

public class TestModel
{
    public object TestValue { get; set; }
}

我的数据库包含JSON格式的字符串,例如

string dbValue1 = "[\"test value\"]"
string dbValue2 = "[\"one value\",[\"another value|or this value\"]]"
int dbValue3 = 1
bool dbValue4 = true

我需要将这些值反序列化为TestModel.TestValue属性,以便在序列化对象时获得与数据库中存储的格式相同的格式。我显然可以得到intbool一个基本数组,但我不能在一个稍微复杂的数组的情况下。从上面的dbValue2我希望输出为:

"testValue" : ["one value",["another value|or this value"]]

现在,我正在使用ServiceStack.Text,到目前为止,这是我尝试过的:

TestValue = JsonSerializer.DeserializeFromString(dbValue, typeof(object))
TestValue = dbValue.FromJson<object>()
TestValue = JsonObject.Parse(dbValue)

这些产生:

"testValue":"[one value,[another value|or this value]]"
"testValue":{"one value":["another value|or this value"]}
"testValue":{"one value":["another value|or this value"]}

我可以理解为什么这些不起作用,但我无法弄清楚如何做我需要的。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

这是因为根元素是JSON中的数组。 ServiceStack似乎扼杀了它。

如果您尝试使用ServiceStack并添加一个根对象,该对象具有与属性相同的数组,例如

var json = "{\"root\":[\"one value\",[\"another value|or this value\"]]}";
var testValue = JsonObject.Parse(json);
Console.WriteLine(testValue.ToJson());

它正确地序列化了数组。

Json.Net似乎只是工作。

var json = "[\"one value\",[\"another value|or this value\"]]";            
var testValue = JsonConvert.DeserializeObject(
Console.WriteLine(JsonConvert.SerializeObject(testValue));

恼人的:)