我有以下对象:
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
属性,以便在序列化对象时获得与数据库中存储的格式相同的格式。我显然可以得到int
或bool
一个基本数组,但我不能在一个稍微复杂的数组的情况下。从上面的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"]}
我可以理解为什么这些不起作用,但我无法弄清楚如何做我需要的。
非常感谢任何帮助。
答案 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));
恼人的:)