如何使用.Net以漂亮的格式编写JSON文件

时间:2019-02-21 21:42:14

标签: c# .net json

使用以下代码将json字符串写入文件时,在编辑文件时它不会以漂亮的格式显示,而只是以字符串格式显示。如果我使用.Net小提琴,则控制台输出正确且看起来不错。我如何将json字符串写入文件,因此在编辑/ w时说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)) 

使用记事本++编辑时,我得到此文件输出

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

2 个答案:

答案 0 :(得分:0)

有了雄鹰并尝试自己之后,这就是我发现的: 您首先必须反序列化该字符串,然后再次对其进行序列化。

编辑:也接受了您的代码,并获得了所需的输出,就像其他评论中所说的那样。我调整了使用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到弗兰克的信用

答案 1 :(得分:0)

尝试以下代码:

_id