无法将类型'ulong []'隐式转换为'Newtonsoft.Json.Linq.JToken'

时间:2020-09-02 11:52:52

标签: c# json

我正在尝试将ulong []保存到我的json文件中。

这是我的代码:

ulong[] ts = new ulong[3];
ts[0] = 749076952626757682
ts[1] = 849076952626757682
ts[2] = 949076952626757682

var json = string.Empty;
json = File.ReadAllText(@"file.json");
dynamic jsonObj = JsonConvert.DeserializeObject(json);

jsonObj["whitelistedChannels"] = ts; //this is the line on which i'm getting the error
tring output = JsonConvert.SerializeObject(jsonObj, Formatting.Indented);
File.WriteAllText(configFile, output);

这是我的json

{
  "test": []
}

我希望我的json文件看起来像这样:

{
  "test": [749076952626757682,849076952626757682,949076952626757682]
}

我该怎么做?预先感谢。

3 个答案:

答案 0 :(得分:3)

尝试一下:

ulong[] ts = new ulong[3];
ts[0] = 749076952626757682;
ts[1] = 849076952626757682;
ts[2] = 949076952626757682;

var obj = new { test = ts };

//pick only one of the next two lines
var json = JsonConvert.SerializeObject(obj); //from Newtonsoft.Json
var json = JsonSerializer.Serialize(obj); //from System.Text.Json

File.WriteAllText("filename.json", json);

答案 1 :(得分:3)

如果您不想创建一个特殊的类来表示您的json结构,则可以反序列化为JObject并使用Add方法使用JToken.FromObject添加新属性:

var jObj = JsonConvert.DeserializeObject<JObject>(json); // or use `JObject.Parse`
ulong[] ts = new ulong[3];
ts[0] = 749076952626757682;
ts[1] = 849076952626757682;
ts[2] = 949076952626757682;
jObj.Add("whitelistedChannels", JToken.FromObject(ts));

或这样设置现有的(实际上也可以添加):

jObj["test"] = JToken.FromObject(ts);

答案 2 :(得分:0)

您可以创建一个类来反序列化文件的内容,然后将数据与现有数据一起添加并将其重写到文件中。下面是示例代码

创建课程

public class DataToWrite
{
   public List<ulong> whitelistedChannels { get; set; }
}

然后在您的代码中

var json = File.ReadAllText(@"file.json");
var jsonObj = JsonConvert.DeserializeObject(json);

jsonObj.whitelistedChannels.AddRange(ts);
string output = JsonConvert.SerializeObject(jsonObj, Formatting.Indented);
File.WriteAllText(configFile, output);

文件中的初始数据

{
  "whitelistedChannels": []
}

将数据写入文件后

{
  "whitelistedChannels": [
    749076952626757682,
    849076952626757682,
    949076952626757682
  ]
}