【问题标题】:How to write a JSON file in pretty format using .Net如何使用 .Net 以漂亮的格式编写 JSON 文件
【发布时间】:2019-02-21 21:42:13
【问题描述】:

使用下面的代码将 json 字符串写入文件时,在编辑文件时它不会以漂亮的格式显示,而只是显示为字符串格式。如果我使用 .Net fiddle,控制台输出是正确的并且看起来不错。如何将 json 字符串写入文件,因此在编辑 /w say notepad++ 时,它会以漂亮的格式显示。有人可以帮忙吗?

.Net Fiddle 代码用于控制台输出,效果很好

public class Program
{
    public static void Main()
    {
        String sPrettyStr;
        var item = "{\"messageType\":\"0\",\"code\":\"1\"}";
        sPrettyStr = JValue.Parse(item).ToString(Newtonsoft.Json.Formatting.Indented);
        Console.WriteLine(sPrettyStr);
    }
}

.Net Fiddle 控制台输出

{
  "messageType": "0",
  "code": "1"
}

但是当使用这个将格式化的 json 字符串写入文件时

File.WriteAllText(c:/test.json,JValue.Parse(item).ToString(Newtonsoft.Json.Formatting.Indented)) 

我在使用 notepad++ 编辑时得到这个文件输出

"{\\\"messageType\\\":\\\"0\\\",\\\"code\\\"}"

【问题讨论】:

  • 不,我已经尝试了所有这些示例,但它们都不起作用。文件输出仍然是字符串格式。
  • 我已将您的代码复制并粘贴到 LINQPad 中,它会产生您想要的输出,因此显然有一些您没有显示的代码干扰了代码。
  • 我将您的代码复制/粘贴到一个新的控制台应用程序中,并且在没有任何更改的情况下也获得了预期的结果。
  • 尝试使用 JToken.Parse() 而不是 JValue.Parse()。也许您正在使用将给定字符串视为文字的旧版本库。

标签: c# .net json


【解决方案1】:

在尝试过自己之后,我发现: 您首先必须对字符串进行反序列化,然后再对其进行序列化。

编辑:也使用了您的代码并获得了所需的输出,就像评论中的其他人所说的那样。我调整为使用 JToken 而不是 JValue,一切都很好。

using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace StackOverflow
{
    class Program
    {
        static void Main(string[] args)
        {
            var item = "{\"messageType\":\"0\",\"code\":\"1\"}";

            var t = JsonConvert.DeserializeObject(item);
            var x = JsonConvert.SerializeObject(t, Formatting.Indented);

            string sPrettyStr;
            var item2 = "{\"messageType\":\"0\",\"code\":\"1\"}";
            sPrettyStr = JToken.Parse(item2).ToString(Formatting.Indented);

            Console.WriteLine(x);
            Console.WriteLine(sPrettyStr);
            Console.ReadLine();
        }
    }
}

here 向 Frank 致谢

【讨论】:

    【解决方案2】:

    试试这个代码:

    var item = "{\"messageType\":\"0\",\"code\":\"1\"}";
    JToken token = JToken.Parse(item);
    JObject json = JObject.Parse((string) token);
    Console.WriteLine(json);
    

    【讨论】:

      猜你喜欢
      • 2016-02-20
      • 1970-01-01
      • 2019-04-30
      • 1970-01-01
      • 2021-05-20
      • 2020-01-24
      • 2020-07-23
      • 2016-01-09
      • 2013-09-23
      相关资源
      最近更新 更多