2009-12-11 95 views
4

我有一个类库,我需要通过ASP.NET MVC框架中的JsonResult输出。 (JsonResult使用JsonSerializer产生它的输出。)在JsonSerializer中重命名字段

我通过阅读文档发现,如果你把[ScriptIgnore]上的公用属性/领域,它不会得到系列化,很像[XmlIgnore]为XML序列化。

我需要[XmlElement("elementname")]的等价功能,它绝对指定输出序列化中字段/属性的名称。我有一个名为Elements的字段,需要序列化到名为elements的字段。

我该如何使用默认的JsonSerializer来实现这个功能?

谢谢, 大卫

+0

我很困惑,为什么会得到低估。它与任何想要使用强类型类库的人都可以脱离JavaScript而分离。 – 2009-12-11 15:53:58

+0

+1同意......好问题! – 2009-12-11 15:55:03

+0

从此序列化程序的MSDN文档中,它不会出现任何更多的属性适用于它。如果它真的不支持它,这是非常令人失望的。在这个例子中,我的用例是与OpenFlashChart2对象模型兼容的JSON.net实现,我只想用[ScriptIgnore]注释这些字段以及此问题产生的任何属性,然后作为工作返回给OpenFlashChart2团队ASP.NET MVC兼容库。现在看起来好像我将不得不将这些类封装在一个命名不清的公共字段的ASP.NET MVC包装器中。 – 2009-12-11 16:00:22

回答

2

是否使用了DataContractJsonSerializer类?

如果是这样......

这个属性添加到您Elements

[DataMember(Name = "elements")] 

SO question表明如何覆盖利用JsonScriptSerializer来JsonDataContractSerializer。

善良,

+0

不,我正在使用JsonSerializer。正如我所提到的,它是必需的,因为它是JsonResult在MVC框架中使用的。 – 2009-12-11 15:35:45

+2

增加了SO问题的链接,解释了使用differenet(更多可配置)Json串行器的路由。 – 2009-12-11 15:44:47

+0

仍然不是我正在寻找的东西,但是现在回答这个问题并且非常有帮助。如果没人能回答这个问题,我可能会被迫走上这条路。谢谢! – 2009-12-11 15:52:31

1

不幸的答案是,你不能做到这一点。话虽如此,我目前正在开发一个模块,它将通过在运行时生成一个匿名对象来扩展任何对象,该对象将遵循属性的规则,如JsonIgnore或JsonProperty。当我有东西时我会发布更多信息。