首页 > 解决方案 > C# 将 JSON 写入不带反斜杠的文件

问题描述

我正在开发一个将某些数据写入 JSON 文件的控制台应用程序。问题是 VS 用来转义字符串中的字符的反斜杠正在写入文件中。我确实在stackoverflow上发现了一个类似的问题,但是那个人序列化了两次,导致了这个问题。我不认为这是我的情况(除非我遗漏了什么),这就是为什么我在这里创建了一个单独的问题。

我试过做 string.Replace("\","") 但由于反斜杠实际上并不存在(因为它只是 VS 转义双引号),这无济于事。

我有一个名为 listItem 的类,它有一些属性;

class ListItem
    {
        public string title;
        public string textline;
        public string docuType;
    }

我有一个类 SPList,包含这些 ListItems 的列表;

class SPList
    {
        public string listTitle;
        public List<ListItem> listItems;
    }

我有一个使用 2 个列表写入 JSON 文件的示例;

[
  {
    "listTitle": "\"Another List\"",
    "listItems": [
      {
        "title": "\"Here\"",
        "textline": "\"Another test value\"",
        "docuType": null
      },
      {
        "title": "\"Look at this\"",
        "textline": "\"It's another value for testing\"",
        "docuType": null
      }
    ]
  },
  {
    "listTitle": "\"Sample List\"",
    "listItems": [
      {
        "title": "\"Sample value\"",
        "textline": null,
        "docuType": "\"Analyse\""
      },
      {
        "title": "\"Sample value 2\"",
        "textline": null,
        "docuType": "\"IetsAnders\""
      },
      {
        "title": "\"SampleValue3!\"",
        "textline": null,
        "docuType": "\"Offerte\""
      }
    ]
  }
]

最后,我用来实现这一点的代码;

Task <List<string>>listIDs = GetListIDs();
            listIDs.Wait();
            foreach (string id in listIDs.Result)
            {
                Task<string> lijstTitel = GetListTitle(id);
                lijstTitel.Wait();
                Task<List<string>> listitemIDs = GetItemIDs(id);
                listitemIDs.Wait();
                // Write all the items here
                foreach (string itemID in listitemIDs.Result)
                {

                    Task<ListItem> itempje = GetItem(itemID, id);
                    itempje.Wait();
                    listItems.Add(itempje.Result);
                }

                list.Add( new SPList{
                    listItems = listItems,
                    listTitle = lijstTitel.Result
                });
                listItems = new List<ListItem>();
            }
            string json = JsonConvert.SerializeObject(list, Formatting.Indented);

            System.IO.File.WriteAllText(path, json);

在我发现的类似问题的另一个示例中,该人将他的 JSON 对象序列化了两次,“导致了这个问题的发生。因为我认为我只序列化一次,它是否与我正在使用 Tasks 的事实有关,或者完全是别的什么?

标签: c#json

解决方案


问题不在于反斜杠\,而在于引号"。看起来您正在序列化的数据已经被引用。

如果您可以删除反斜杠,您仍然会在输出中出现双引号""


推荐阅读