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



我正在尝试将字符串列表转换为 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"]"
}

任何帮助不胜感激!

谢谢

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

由于您不反序列化为具体类型,因此您的jsonObj["animals"]只是一个JArray。所以你需要这个:

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

现在,您可以通过 JsonConvert.SerializeObject 将其序列化回。

如果该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);

相关内容

  • 没有找到相关文章

最新更新