Есть ли способ управления форматированием JSON с помощью веб-API WCF? - PullRequest
2 голосов
/ 09 февраля 2012

С выходом 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"
    }
  ]
}

Можно также удалить некоторые свойства класса.хороший.

Ответы [ 3 ]

2 голосов
/ 11 февраля 2012

Веб-API WCF по умолчанию использовал 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 голосов
/ 09 февраля 2012

Попробуйте использовать JSON.NET Formatter из проекта Contrib WCF Web API в codeplex.Атрибуты, подобные показанным здесь, должны помочь вам https://json.svn.codeplex.com/svn/trunk/Doc/SerializationAttributes.html

1 голос
/ 09 февраля 2012

JSON.NET имеет несколько опций атрибутов, которые могут управлять тем, что сериализовано и как.http://james.newtonking.com/projects/json/help/

...