servicestack,C#,Json,servicestack" /> servicestack,C#,Json,servicestack" />

C# 无法以字符串格式从JSON重新创建JSON值

C# 无法以字符串格式从JSON重新创建JSON值,c#,json,servicestack,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 我需要将这

我的目标如下:

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)
我能理解为什么这些不起作用,但我不知道如何做我需要的


任何帮助都将不胜感激。

这是因为根元素是JSON中的一个数组。ServiceStack似乎被这个问题扼住了

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

var json = "{\"root\":[\"one value\",[\"another value|or this value\"]]}";
var testValue = JsonObject.Parse(json);
Console.WriteLine(testValue.ToJson());
它正确地序列化了数组

不过,这似乎很管用

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

恼人的:)

我已经编辑了这个问题,希望它能更清楚一些,但是是的,每个值都在不同的行中。我添加了一个解决方案(有点);-)嘿,先生,是的,我也试过了-伟大的头脑,嗯?然后问题是
testValue
包含键值对。因此,如果我随后用
testValue
设置模型属性,当我的模型属性被序列化时,我会得到根对象,而不仅仅是JSON中的值。如果我尝试从键值对中提取值,那么一切都会再次出错!当执行
var model=new TestModel()时,JSON.NET似乎可以工作;model.TestValue=TestValue;WriteLine(JsonConvert.SerializeObject(model))
还是我遗漏了什么?整个应用程序都基于JSON,因此我不愿意替换序列化程序,因为有一些自定义功能。这将意味着相当多的重新测试。
var json = "[\"one value\",[\"another value|or this value\"]]";            
var testValue = JsonConvert.DeserializeObject(
Console.WriteLine(JsonConvert.SerializeObject(testValue));