将字符串列表转换为方括号再转换为json

时间:2019-02-11 16:02:50

标签: c# json json.net

我正在尝试将已转换的字符串列表更新为JSON方括号“列表”的JSON文件。

我的字符串列表:

var animals = new List<string>() { "bird", "dog" };

使用此代码:

string json = File.ReadAllText(filePath);
dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject(json);
var serializedObject = JsonConvert.SerializeObject(animals);

jsonObj["animals"] = serializedObject;

string output = Newtonsoft.Json.JsonConvert.SerializeObject(jsonObj, Newtonsoft.Json.Formatting.Indented);
File.WriteAllText(filePath, output);

旧的JSON文件:

{
  "animals": ["cat", "fox"]
}

新的JSON文件应为:

{
  "animals": ["bird", "dog"]
}

但是我得到的是:

{
 "animals": "[\"bird\", \"dog\"]"
}

感谢您的帮助!

谢谢

2 个答案:

答案 0 :(得分:2)

您的serializedObject是一个字符串,但是您根本不需要它。

因为您没有反序列化为具体类型,所以jsonObj["animals"]只是JArray。所以你需要这个:

dynamic jsonObj = JsonConvert.DeserializeObject(json);
jsonObj["animals"] = JArray.FromObject(animals);

现在您可以通过JsonConvert.SerializeObject重新序列化它。

答案 1 :(得分:0)

如果jsonObj是常规对象,则可以设置animals属性的值。如果它是一个ExpandoObject,则同样会起作用。 JsonConvert.DeserializeObject(json)会生成一个Json.Net类型,其数据必须是有效的Json.NET类型。

您可以将列表内容作为JArray声明,例如:

var animals = new List<string>() { "bird", "dog" };

dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject("{'moo':1}");

jsonObj.animals= new JArray(animals);
var result=JsonConvert.SerializeObject(jsonObj);

result将是:

{"moo":1,"animals":["bird","dog"]}

仅当文件包含JSON字典时,才能添加新属性。如果知道文件将始终包含字典,则可以将反序列化结果强制转换为JObject,然后通过JObject的索引器添加新属性:

var jsonObj = (JObject)JsonConvert.DeserializeObject("{'moo':1}");
jsonObj["animals"]= new JArray(animals);