无法使用 C# (NewtonSoft) 编辑 JSON,因为我收到错误



>我正在尝试从 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);

相关内容

  • 没有找到相关文章

最新更新