Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何美化JSON以在文本框中显示?_C#_Json - Fatal编程技术网

C# 如何美化JSON以在文本框中显示?

C# 如何美化JSON以在文本框中显示?,c#,json,C#,Json,如何使用C#美化JSON?我想在文本框控件中打印结果 可以使用JavaScriptSerializer吗,还是应该使用JSON.net?除非我必须这样做,否则我希望避免对字符串进行反序列化。使用,您可以使用特定的格式美化输出 网上小提琴 代码 输出 {"Name":"Apple","Expiry":"2008-12-28T00:00:00","Sizes":["Small"]} { "Name": "Apple", "Expiry": "2008-12-28T00:00:00", "

如何使用C#美化JSON?我想在文本框控件中打印结果

可以使用JavaScriptSerializer吗,还是应该使用JSON.net?除非我必须这样做,否则我希望避免对字符串进行反序列化。

使用,您可以使用特定的格式美化输出

网上小提琴

代码

输出

{"Name":"Apple","Expiry":"2008-12-28T00:00:00","Sizes":["Small"]}
{
  "Name": "Apple",
  "Expiry": "2008-12-28T00:00:00",
  "Sizes": [
    "Small"
  ]
}

这次聚会有点晚,但您可以美化(或缩小)Json,而无需使用Json.NET进行反序列化:


JToken-parsedJson=JToken.Parse(jsonString);
var美化=parsedJson.ToString(格式化.缩进);
var minified=parsedJson.ToString(Formatting.None);

编辑:继关于性能的评论中的讨论之后,我测量了使用,并且使用
JToken.Parse
,存在额外的分配成本,并且花费的时间略有增加:


应将ContractResolver.cs序列化

public class ShouldSerializeContractResolver : DefaultContractResolver
    {
        public static readonly ShouldSerializeContractResolver Instance = new ShouldSerializeContractResolver();

        protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
        {
            JsonProperty property = base.CreateProperty(member, memberSerialization);
            return property;
        }
    }

您可以使用上述代码美化json

您可以在不使用新System.Text.json命名空间反序列化的情况下处理json,以避免添加对json.NET的依赖。诚然,这并不像以下那样简洁:


你是说用换行符和缩进格式化?这可能是重复的吗?是否要格式化JSON代码,使其看起来美观易读?但是格式化JSON代码与反序列化有什么关系呢?是的,我说的是美化、换行、缩进。我不想/需要反序列化任何东西,我只是觉得如果我使用JSON.Net,我必须反序列化=>序列化才能有一个漂亮的JSON输出。我想这没有被接受为答案的原因是,使用此方法美化JSON需要在重新序列化之前先反序列化?@Jimbo确实如此。我会找一个替代方案。在解析创建JToken时,您也可以查找stuartd,是不是创建了动态对象?@aloisdg可能是的。我必须检查性能问题。我不确定我们是否能在这方面获胜。有人说“读写JSON的绝对最快的方法是使用JsonTextReader/JsonTextWriter直接手动序列化类型”,但对于大多数涉及格式化JSON的用例来说,这是不必要的。这是不完整的,请说明什么是
ShouldSerializeContractResolver
。您可以再次看到上面的linkcheck评论
public class ShouldSerializeContractResolver : DefaultContractResolver
    {
        public static readonly ShouldSerializeContractResolver Instance = new ShouldSerializeContractResolver();

        protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
        {
            JsonProperty property = base.CreateProperty(member, memberSerialization);
            return property;
        }
    }
 var beautifyJson= Newtonsoft.Json.JsonConvert.SerializeObject(data, new JsonSerializerSettings()
            {
                ContractResolver = ShouldSerializeContractResolver.Instance,
                NullValueHandling = NullValueHandling.Ignore,
                Formatting = Formatting.Indented
            });
using System.IO;
using System.Text;
using System.Text.Json;

public static string BeautifyJson(string json)
{
    using JsonDocument document = JsonDocument.Parse(json);
    using var stream = new MemoryStream();
    using var writer = new Utf8JsonWriter(stream, new JsonWriterOptions() { Indented = true });
    document.WriteTo(writer);
    writer.Flush();
    return Encoding.UTF8.GetString(stream.ToArray());
}