【问题标题】:Creating JSON without array indentation创建没有数组缩进的 JSON
【发布时间】:2018-11-09 09:58:19
【问题描述】:

我通常会得到非常大的 JSON,其中包含很多列表和列表中的很多元素。我的目标是获得左侧结构而不是右侧结构。 正确的结构是我从 Newtonsoft 得到的。 是否有另一个库可以让我控制像这样打印它?

最佳情况是:

【问题讨论】:

  • 如果你让它比左边的更紧凑,那是你要找的吗?
  • 当你序列化一个对象时不要格式化它SerializeObject(product, Formatting.Indented) 会变成SerializeObject(product)SerializeObject(product, Formatting.None) E:这将使它全部在一行上,你为什么要你的 JSON 看起来像最佳情况?
  • @OrelEraki 你好,我用最佳案例更新了我的帖子。
  • @Matt 然后我得到一个非常不可读的大块。我仍然希望能够正确地看到一些元素。基本上是未格式化和格式化之间的平衡。 (通常我必须手动检查特定元素)
  • 如果你想以一种只有你自己知道的奇怪的特殊格式发出 JSON,你将不得不编写代码来做到这一点。

标签: c# json


【解决方案1】:

如果您继承 JsonTextWriter 类并像这样覆盖 WriteIndent 方法,则可以使用 Json.Net(又名 Newtonsoft Json)获得所需的缩进:

public class CustomJsonTextWriter : JsonTextWriter
{
    public CustomJsonTextWriter(TextWriter writer) : base(writer)
    {
    }

    protected override void WriteIndent()
    {
        if (WriteState != WriteState.Array)
            base.WriteIndent();
        else
            WriteIndentSpace();
    }
}

然后创建一个小助手方法,以方便使用自定义编写器:

public static class JsonHelper
{
    public static string SerializeWithCustomIndenting(object obj)
    {
        using (StringWriter sw = new StringWriter())
        using (JsonWriter jw = new CustomJsonTextWriter(sw))
        {
            jw.Formatting = Formatting.Indented;
            JsonSerializer ser = new JsonSerializer();
            ser.Serialize(jw, obj);
            return sw.ToString();
        }
    }
} 

这是一个工作演示:https://dotnetfiddle.net/RusBGI

【讨论】:

    猜你喜欢
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多