首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ServiceStack.Text提供漂亮的JSON打印功能吗?

问ServiceStack.Text提供漂亮的JSON打印功能吗?
EN

Stack Overflow用户
提问于 2012-12-06 17:28:02
回答 3查看 4.1K关注 0票数 14

DR:在ServiceStack.Text中有没有一种内置的方法来生成漂亮的打印JSON?

我正在使用ServiceStack.Text进行JSON序列化。到目前为止,它工作得非常好,但是创建的JSON (使用.ToJSON())没有使用空格或换行符(在网络上发送时最有可能节省空间)。但是,在某些情况下,最好对JSON进行格式化,以便于人类阅读。

.Dump ()方法进行某种格式化,但是不会生成有效的JSON (即缺少周围的双二进制数)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-07 12:51:19

ServiceStack.Text中的T.Dump()和T.PrintDump()扩展方法只是用TypeSerializer类或T.ToJsv()扩展方法创建的JSV Format的一个非常格式化的版本。它只是为了提供一个人类友好的数据转储,它是不可解析的。

v4.5.5提供的新的string.IndentJson()扩展方法将允许您漂亮地打印JSON,否则您可以安装适用于Chrome或Firefox的漂亮的JSONView扩展来查看漂亮的JSON,或者您可以将JSON粘贴到jsonprettyprint.com中

票数 9
EN

Stack Overflow用户

发布于 2013-04-22 18:45:15

从servicestack文本中获得一个漂亮的json格式会更好。作为一种解决办法,因为我创建了一个插件来在需要时格式化json。希望在将来的服务栈发布中,我可以摆脱这些代码。

从下面的链接下载dll (它为您提供了格式化json的扩展方法) http://www.markdavidrogers.com/json-pretty-printerbeautifier-library-for-net/

我使用它来代替像json.net这样的东西,因为我想确保我不会更改json的服务堆栈序列化。

然后,我创建了以下插件

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using JsonPrettyPrinterPlus;
using ServiceStack.Common.Web;
using ServiceStack.ServiceClient.Web;
using ServiceStack.ServiceHost;
using ServiceStack.ServiceModel.Serialization;
using ServiceStack.ServiceModel.Support;
using ServiceStack.WebHost.Endpoints;

namespace Bm.Services.Plugins
{
    public class PrettyJsonFormatPlugin : IPlugin
    {
        public const string JsonPrettyText = "application/prettyjson";
        public void Register(IAppHost appHost)
        {
            appHost.ContentTypeFilters.Register(JsonPrettyText,
                 Serialize,
                 Deserialize);

        }

        public static void Serialize(IRequestContext requestContext, object dto, Stream outputStream)
        {
            var json = HttpResponseFilter.Instance.Serialize(ContentType.Json, dto);

            json = json.PrettyPrintJson();
            byte[] bytes = Encoding.UTF8.GetBytes(json);

            outputStream.Write(bytes, 0, bytes.Length);
        }

        public static object Deserialize(Type type, Stream fromStream)
        {
            var obj = JsonDataContractDeserializer.Instance.DeserializeFromStream(type, fromStream);
            return obj;
        }

    }

    public class PrettyJsonServiceClient : JsonServiceClient
    {
        public PrettyJsonServiceClient() : base()
        {
        }

        public PrettyJsonServiceClient(string baseUri) : base(baseUri)
        {           
        }

        public PrettyJsonServiceClient(string syncReplyBaseUri, string asyncOneWayBaseUri) : base(syncReplyBaseUri, asyncOneWayBaseUri)
        {
        }

        public override string Format
        {
            get
            {
                return "prettyjson";
            }
        }
    }
}

在启动代码中注册新插件

代码语言:javascript
复制
EndpointHost.AddPlugin(new PrettyJsonFormatPlugin());

从c#调用示例服务

代码语言:javascript
复制
var prettyJsonClient = new PrettyJsonServiceClient(HOST_URL);
var ret = prettyJsonClient.Get<string>(@"/system/ping/test");

下面是一个等价的xml

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Bm.Core;
using JsonPrettyPrinterPlus;
using ServiceStack.Common.Web;
using ServiceStack.ServiceClient.Web;
using ServiceStack.ServiceHost;
using ServiceStack.ServiceModel.Serialization;
using ServiceStack.ServiceModel.Support;
using ServiceStack.WebHost.Endpoints;

namespace Bm.Services.Plugins
{
    public class PrettyXmlFormatPlugin : IPlugin
    {
    public const string XmlPrettyText = "application/prettyxml";
    public void Register(IAppHost appHost)
    {
        appHost.ContentTypeFilters.Register(XmlPrettyText,
         Serialize,
         Deserialize);

    }

    public static void Serialize(IRequestContext requestContext, object dto, Stream outputStream)
    {

        var xml = HttpResponseFilter.Instance.Serialize(ContentType.Xml, dto);

        xml =  Common.PrettyXml(xml);
        byte[] bytes = Encoding.UTF8.GetBytes(xml);

        outputStream.Write(bytes, 0, bytes.Length);
    }

    public static object Deserialize(Type type, Stream fromStream)
    {
        var obj = JsonDataContractDeserializer.Instance.DeserializeFromStream(type, fromStream);
        return obj;
    }

    }

    public class PrettyXmlServiceClient : XmlServiceClient
    {
    public PrettyXmlServiceClient()
        : base()
    {
    }

    public PrettyXmlServiceClient(string baseUri)
        : base(baseUri)
    {
    }

    public PrettyXmlServiceClient(string syncReplyBaseUri, string asyncOneWayBaseUri)
        : base(syncReplyBaseUri, asyncOneWayBaseUri)
    {
    }

    public override string Format
    {
        get
        {
        return "prettyxml";
        }
    }
    }
}
票数 2
EN

Stack Overflow用户

发布于 2016-10-29 02:00:14

要获得漂亮的JSON:

代码语言:javascript
复制
var formattedJson = JsvFormatter.Format(JsonSerializer.SerializeToString(dto));

生成的json字符串可以解析回来:

代码语言:javascript
复制
var dto = JsonSerializer.DeserializeFromString<MyDto>(formattedJson);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13740534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档