即将到来的WCF Web API,有没有办法控制JSON输出?
我想更改外壳并且可能会在序列化类时禁止包含某些属性。
作为一个例子,请考虑这个非常简单的类:
[XmlRoot("catalog", Namespace = "http://api.247e.com/catalog/2012")]
public class Catalog
{
[XmlArray(ElementName = "link-templates")]
public LinkTemplate[] LinkTemplates { get; set; }
}
正如您所看到的,我已经添加了各种XML属性,以便控制它在XML中的序列化方式。我可以为JSON做同样的事情(或其他事情)吗?
供参考,这是XML格式的示例输出:
<catalog xmlns="http://api.247e.com/catalog/2012"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<link-templates>
<link-template href="http://localhost:9000/search/?criterion={criterion}"
rel="http://docs.247e.com/rels/search"/>
</link-templates>
</catalog>
对于JSON,结果如下:
{
"LinkTemplates":
[
{
"Href":"http:\/\/localhost:9000\/search\/?criterion={criterion}",
"Rel":"http:\/\/docs.247e.com\/rels\/search"
}
]
}
但是,我想更改属性的大小写,所以我更喜欢这样的东西:
{
"linkTemplates":
[
{
"href":"http:\/\/localhost:9000\/search\/?criterion={criterion}",
"rel":"http:\/\/docs.247e.com\/rels\/search"
}
]
}
剥离某些类属性的方法也不错。
答案 0 :(得分:2)
尝试在codeplex上使用WCF Web API Contrib项目中的JSON.NET Formatter。此处显示的属性可以帮助您https://json.svn.codeplex.com/svn/trunk/Doc/SerializationAttributes.html
答案 1 :(得分:2)
WCF Web API默认使用DataContractJsonSerializer以JSON格式返回资源。因此,您应该使用类上的DataContract和DataMember属性来塑造JSON结果。
[DataContract]
public class Book
{
[DataMember(Name = "id")]
public int Id { get; set; }
[DataMember(Name = "title")]
public string Title { get; set; }
[DataMember(Name = "author")]
public string Author { get; set; }
[XmlIgnore] // Don't send this one
public string ImageName { get; set; }
}
答案 2 :(得分:1)
JSON.NET有几个属性选项,可以控制序列化的内容和方式。 http://james.newtonking.com/projects/json/help/