使用 JSON 时如何让 ServiceStack 用破折号格式化 Guid?

Posted

技术标签:

【中文标题】使用 JSON 时如何让 ServiceStack 用破折号格式化 Guid?【英文标题】:How to get ServiceStack to format Guids with dashes when using JSON? 【发布时间】:2012-04-04 03:39:33 【问题描述】:

使用 ServiceStack 从 Post 中返回一个简单的 User 对象。

用户对象非常简单:

public class User

    public Guid Id  get; set; 
    public string Username  get; set; 

发帖方式:

public override object OnPost(User user)

    User newUser;
    // Do stuff to user...
    return newUser;

我的问题是 ServiceStack 格式化没有破折号的 Guid,所以 JSON 响应看起来例如像这样:

"id":"c884ce020ec94c65a8788c2ddc500434","username":"new user name"

客户端是 android/Java 客户端,UUID.fromString() 方法确实对这种格式感到不安。

有没有办法强制 ServiceStack 返回一个用破折号格式化的 Guid?

【问题讨论】:

【参考方案1】:

您可以将您的 Guid 序列化程序覆盖为

ServiceStack.Text.JsConfig<Guid>.SerializeFn = guid => guid.ToString();

【讨论】:

仅供参考,您需要覆盖 Guid 吗?如果您希望为可为空的 Guid 进行相同的序列化。 使用 ToString("D") 更好,msdn.microsoft.com/en-us/library/97af8hh4.aspx @LiuPeng:Guid? 没有ToString(string format)(任何Nullable&lt;T&gt;

以上是关于使用 JSON 时如何让 ServiceStack 用破折号格式化 Guid?的主要内容,如果未能解决你的问题,请参考以下文章

让 ServiceStack 保留类型信息

ServiceStack 文本设置以在反序列化 json 时推断原始值类型

使用 ServiceStack JsonSerializer 的 DataTable JSON 序列化

更改 ServiceStack.Text JSON 反序列化器的输出

如何配置 ServiceStack Json Serializer 以将 bool 值写入 int 或 byte?

使用带有 servicestack 的构造函数反序列化 json