猿问

将字符串列表转换为方括号到 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\"]"

}

任何帮助是值得赞赏的!


谢谢


慕妹3242003
浏览 206回答 2
2回答

翻过高山走不出你

你的是一个字符串,但你根本不需要它。serializedObject由于您不会反序列化为具体类型,因此您的只是一个 .所以你需要这个:jsonObj["animals"]JArraydynamic jsonObj = JsonConvert.DeserializeObject(json);jsonObj["animals"] = JArray.FromObject(animals);现在,您可以通过 将其序列化回去。JsonConvert.SerializeObject

慕码人8056858

如果这是一个常规对象,则只需设置属性的值即可。如果它是一个ExpandoObject,那也同样有效。 虽然生成一个 Json.Net 类型,其数据必须 Json.NET 类型有效。jsonObjanimalsJsonConvert.DeserializeObject(json)您可以将列表内容作为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);
随时随地看视频慕课网APP
我要回答