Có một định dạng json đẹp sẽ là tốt từ văn bản servicestack. Như một giải pháp thay thế vì tôi đã tạo một plugin để định dạng json khi tôi cần nó. Hy vọng rằng một bản phát hành dịch vụ ngăn xếp trong tương lai tôi có thể loại bỏ mã này.
Tải dll từ liên kết dưới đây, (nó mang lại cho bạn một phương pháp mở rộng để định dạng json) http://www.markdavidrogers.com/json-pretty-printerbeautifier-library-for-net/
Tôi sử dụng này thay cho cái gì đó như json.net như tôi muốn chắc chắn rằng tôi đã không thay đổi tuần tự hóa servicestack của json.
Sau đó, tôi đã tạo ra sau pluging
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";
}
}
}
}
Trong bạn mã khởi động đăng ký các plugin mới
EndpointHost.AddPlugin(new PrettyJsonFormatPlugin());
Để gọi một dịch vụ ví dụ từ C#
var prettyJsonClient = new PrettyJsonServiceClient(HOST_URL);
var ret = prettyJsonClient.Get<string>(@"/system/ping/test");
Dưới đây là một equivilent xml one
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";
}
}
}
}
Pitty, sẽ thực sự tuyệt vời để có in khá cho JSON. Nó không chỉ là về việc tự xem dữ liệu khi gỡ lỗi, nhưng tức là khi viết JSON vào các tệp để lưu trữ liên tục. – Dyna
Chắc chắn, nó có thể hữu ích - không phải lúc chi phí làm chậm và gây ô nhiễm đường dẫn cốt lõi. Một quá trình định dạng bài viết hoạt động như 'T.Dump()' là tốt hơn. Nhưng không phải thứ tôi cần để ưu tiên cho tôi - đầu tiên cần nó để thực hiện nó trước :) – mythz
Đối với một cái gì đó giống như một tệp cấu hình, có thể đọc tài liệu trong trình soạn thảo văn bản là hữu ích, và tốc độ là không thực sự là một vấn đề lớn khi tải một tập tin cấu hình. –