Есть ли ODataSerializer для последовательных пользовательских объектов? - PullRequest
3 голосов
/ 02 февраля 2012

Мне нужно что-то, чтобы взять произвольный объект / список / словарь, возвращенный мне при вызове службы WCF, для сериализации в OData. В настоящее время я использую CTP WCF Data Services за октябрь 2011 года, чтобы выполнить это, генерируя ODataEntry / ODataFeed и т. Д., Используя отражение, но если что-то уже реализовано, я бы лучше использовал это вместо того, чтобы изобретать колесо ...

Любая помощь / информация будет принята с благодарностью.

Например:

Person p = new Person()
{
PersonID = 1,
FirstName = "Bob",
LastName = "Smith",
Address = new Address()
     {
          AddressID = 1,
          Address1 = "1 Main St",
          Address2 = "Suite 200",
          City = "Columbus",
          State = "OH",
          ZipCode = "43215"
     }
};

будет переводиться на

{
  "d":{
    "__metadata":{
      "id":"Person(1)","uri":"http://serviceroot/Person(1)","type":"MyProject.Person"
    },
"PersonID":1,
"FirstName":"Bob",
"LastName":"Smith",
"Address":{
              "AddressID":1,
              "Address1":"1 Main St",
              "Address2":"Suite 200",
              "City":"Columbus",
              "State":"OH",
              "ZipCode":"43215"
          }
      }
}

1 Ответ

1 голос
/ 15 июля 2013

Так как формат OData JSON , я бы предложил использовать ServiceStack.Text . Это быстрый сериализатор .NET, написанный специально для таких целей. Он является частью ServiceStack каркаса веб-сервисов, и его использование действительно просто.

1) Импорт и ссылка на инфраструктуру ServiceStack в вашем проекте (либо через NuGet , либо напрямую из GitHub )

2) Создайте и заполните сложный объект, как вы уже делаете:

Person p = new Person()
{
    PersonId = 1,
    FirstName = "Bob",
    LastName = "Smith",
    Address = new Address()
    {
        AddressId = 1,
        Address1 = "1 Main St",
        Address2 = "Suite 200",
        City = "Columbus",
        State = "OH",
        ZipCode = "43215"
    }
};

3) Вызовите метод расширения ToJson из сложного объекта:

p.ToJson();

4) Вуаля - вывод (по желанию):

{
  "PersonId": 1,
  "FirstName": "Bob",
  "LastName": "Smith",
  "Address": 
  {
    "AddressId": 1,
    "Address1": "1 Main St",
    "Address2": "Suite 200",
    "City": "Columbus",
    "State": "OH",
    "ZipCode": "43215"
  }
}

Подсказка: чтобы напечатать вывод для целей отладки, используйте PrintDump () :

p.ToJson().PrintDump(); 
...