>我正在尝试从 JSON 文件更改 JSON,以便我可以运行它以获得 JSON 响应,我在这篇文章中找到了代码: 更改 JSON 文件中的值(写入文件( 任何人都可以解决这个问题吗?
错误:
Newtonsoft.JSON 中发生了类型为"System.ArgumentException"的未处理异常.dll
附加信息: 使用无效键值设置 JArray 值:"filter"。需要 Int32 数组索引。
杰森:
[{
"tablename" : "table",
"columns" : "id, name",
"filter" : "id = 10"
}]
法典:
string json = File.ReadAllText("file.json");
dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject(json);
jsonObj["filter"] = "id = 20";
string output = Newtonsoft.Json.JsonConvert.SerializeObject(jsonObj, Newtonsoft.Json.Formatting.Indented);
File.WriteAllText("file.json", output);
(JSON用于与Web服务通信(
这应该是:
jsonObj[0]["filter"] = "id = 20";
因为你的JSON是一个数组。所以 0 是数组中的第一个对象。
您有几个选项,但是当您将其反序列化为动态时,您可以尝试以下操作。
var json = File.ReadAllText("file.json");
dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject(json);
jsonObj[0].filter = "id = 20"; //<--CALLING PROPERTY DIRECTLY via DynamicObject
var output = Newtonsoft.Json.JsonConvert.SerializeObject(jsonObj, Newtonsoft.Json.Formatting.Indented);
File.WriteAllText("file.json", output);
显示的 JSON 数据是一个 JSON 数组,因此您需要使用索引来获取数组的元素。
您还可以创建一个类来保存反序列化的数据
public class Model
{
public string tablename { get; set; }
public string columns { get; set; }
public string filter { get; set; }
}
并使用它
var json = File.ReadAllText("file.json");
//Deserializing Object to Model Array
var jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject<Model[]>(json);
jsonObj[0].filter = "id = 20"; //<--CALLING PROPERTY DIRECTLY
var output = Newtonsoft.Json.JsonConvert.SerializeObject(jsonObj, Newtonsoft.Json.Formatting.Indented);
File.WriteAllText("file.json", output);