【问题标题】:How to format some ASP.NET MVC Json result?如何格式化一些 ASP.NET MVC Json 结果?
【发布时间】:2010-11-28 08:43:00
【问题描述】:

我有一个非常简单的 POCO(业务)对象,我使用 ASP.NET MVC 将它作为一些 json 返回给客户端。

例如。 (请忽略缺少错误检查等)。

public JsonAction Index()
{
    Foo myFoo = MyService();
    return Json(myFoo);
}

kewl。现在,该对象包含以下公共属性...

public class Foo
{
    public decimal Score { get; set; }
    public Dictionary<string, string> KeyValues { get; set; }
}

现在,当对象被序列化为 json 时,十进制分数的精度为 7(我在精度为 2 之后)并且 KeyValues 可能为空。如果为 null,则 json 看起来像这样......

"KeyValues" : null

我希望 KeyValues 不包含在 json 中,如果它为 null。

有什么技巧可以帮助格式化这个 json 输出吗?还是我需要手动执行此操作.. 制作我自己的字符串.. 然后将其返回为.. 我不知道.. 一个 ContentAction? (eeks)。

请帮忙!

【问题讨论】:

  • 这不值得麻烦,但我相信有人知道怎么做。
  • 这是你锁定 300 次命中一秒的 api 调用的时候。是的。一秒钟。
  • 所以你这样做是出于性能原因?你有没有简介过?您的瓶颈可能在其他地方。

标签: asp.net-mvc json serialization poco


【解决方案1】:

ASP.Net MVC Json() 方法在内部使用 JavascriptSerializer 进行编码。有一些选项可以通过创建和注册您自己的 JavascriptConverter 对象来控制您的类的序列化。

【讨论】:

  • 明白了。所以我需要提供我自己的代码来告诉序列化程序我的 poco 需要如何序列化和/或反序列化。
  • 是的,很不幸。基本上,这相当于提供自定义 Serialize() 和 Deserialize() 方法,它们迭代您的对象属性并将它们的值添加到字典中以进行 JSON 处理。您将跳过空值。一种真正构建自己的字符串的奇特方式;)
  • 没有机会要求任何博客文章/示例?给 shi+s 和 giggs?
  • 我认为我链接的文档页面上的示例非常好。在创建要放入字典的“文本”和“值”项的地方,您将输入“属性名称”和“属性值”。如果我以后有时间我会自己尝试但不要指望它;)
  • 很遗憾,您无法将转换器添加到 JSONResult 使用的序列化程序。因此,您需要创建自己的 JavaScriptSerializer 并使用 .RegisterConverters() 注册您的转换器。创建一个 ContentResult 并将 Content 属性设置为您的对象,并使用您的序列化程序进行序列化。将 ContentType 设置为“application/json”,然后返回 ContentResult。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-30
  • 1970-01-01
  • 2011-01-19
  • 2013-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多