首页 > 解决方案 > Json.net 附加 json 文件

问题描述

我有以下使用 Json.net 的代码:

class HistorianRecord
{
    public string tagname { get; set; }
    public string engunits { get; set; }
    public string value { get; set; }
    public string quality { get; set; }
    public DateTime timestamp { get; set; }
}

private static void createJSONFile(DataTable dt)
{
    var HistorianData = new List<HistorianRecord>();

    foreach(DataRow row in dt.Rows)
    {
        HistorianData.Add(new HistorianRecord()
        {
            tagname = row["tagname"].ToString(),
            engunits = row["engunits"].ToString(),
            value =  row["value"].ToString(),
            quality = row["quality"].ToString(),
            timestamp = DateTime.Parse(row["timestamp"].ToString())
        });
    }

    var serializer = new JavaScriptSerializer();
    var serializedResult = serializer.Serialize(HistorianData);
    var deserializedResult = serializer.Deserialize<List<HistorianRecord>>(serializedResult);

    File.WriteAllText(folderPath + fileName, JsonConvert.SerializeObject(deserializedResult));
}

这会产生以下JSON文件,我已为这篇文章缩短了该文件,因为其中 > 1000 行datatable

[
  {
    "tagname": "mytag1",
    "engunits": "",
    "value": "2",
    "quality": "Good NonSpecific",
    "timestamp": "2018-12-13T10:45:05Z"
  },
  {
    "tagname": "myTag2",
    "engunits": "",
    "value": "0",
    "quality": "Good NonSpecific",
    "timestamp": "2018-12-13T10:45:00Z"
  }
]

我想修改我的代码,以便可以在 JSON 文件的开头添加一些项目,使其看起来更像这样:

[
  {
    "name": "ARandomName",
    "content": [
      {
        "tagname": "mytag1",
        "engunits": "",
        "value": "2",
        "quality": "Good NonSpecific",
        "timestamp": "2018-12-13T10:45:05Z"
      },
      {
        "tagname": "myTag2",
        "engunits": "",
        "value": "0",
        "quality": "Good NonSpecific",
        "timestamp": "2018-12-13T10:45:00Z"
      }
    ]
  }
]

这样我就可以为我正在调查的测试 MongoDB 安装创建一些文档,因此感谢所有帮助。

标签: jsonjson.net

解决方案


您只需将您的反序列化列表包装HistorianRecords在一个匿名对象中并重新序列化它:

var anon = new 
{
    name = "ARandomName",
    content = deserializedResult 
};

string newJson = JsonConvert.SerializeObject(anon, Formatting.Indented);

小提琴:https ://dotnetfiddle.net/6kSvxS


推荐阅读