JavaScriptAerializer的等效的XmlAttribute / XmlElement

时间:2009-09-24 14:31:10

标签: .net javascript serialization

是否有一个等效的属性可以放在.NET类中的对象属性上,它将执行等效的XmlElement或XmlAttribute?

[XmlRoot("objects")]
public class MyObjects: List<MyObject> { }

[XmlRoot("object")]
public class MyObject {
  [XmlAttribute("name")]
  public string Name { get; set; }
  [XmlAttribute("title")]
  public string Title { get; set; }
}

这将返回类似于以下内容的XML:

<objects>
  <object name="David" title="Engineer" />
  <object name="William" title="Developer" />
</objects>

我想拥有JavaScriptSerializer,它由Controller类中的ASP.NET MVC框架'Json'方法使用:

public ActionResult Search() {
   // code to populate data object
   return Json(data);
}

返回相同的格式化结果,如下所示:

[{"name":"David","title":"Engineer"},{"name":"William","title":"Developer"}]

目前,使用Json方法输出对象,返回:

[{"Name":"David"}, "Title":"Engineer"}, {"Name":"William", "Title":"Developer"}]

现在,我意识到这个例子是超级简化的,我在这里做的唯一事情是更改属性名称的大小写,但在更高级的场景中,我可以将属性名称重新映射到其他东西......

System.Web.Script.Serialization包含一个ScriptIgnoreAttribute属性,但这只是告诉JavaScriptSerializer在序列化时忽略该属性,但是似乎没有任何东西可以改变实际输出的名称或格式呢?

1 个答案:

答案 0 :(得分:2)

使用JavaScript序列化程序(.NET 2.0),不是真的...
使用DataContractSerializer(.NET 4.0,),是的


JavaScriptSerializer.Deserialize - how to change field names
你所拥有的所有替代品。

当您准备意识到内置序列化程序不是很有用时,请使用JSON.NET,添加对Newtonsoft.JSON的引用,并按以下方式执行:

[JsonProperty(PropertyName = "FooBar")]
public string Foo { get; set; }