Как управлять именами свойств (корпусом) десериализованных объектов JSON с помощью методов service / WebInvoke - PullRequest
4 голосов
/ 05 февраля 2012

Я предоставляю услугу, используя такой код:

// Set up the test service
testServiceHost = new WebServiceHost(typeof(TestTrelloService), testServiceAddress);
testServiceHost.Open();

И я отправляю PUT с RestSharp, к методу, подобному этому:

[OperationContract]
[WebInvoke(Method = "PUT", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "cards/{cardId}?key={key}")]
public void UpdateCard(string key, string cardId, Card updatedCard)
{
    // ...
}

key и cardId поступают из строки url / query, а updatedCard - это тело запроса (с JSON).

Все работает нормально, если мой класс Card выглядит следующим образом:

public class Card
{
    public string id { get; set; }
    // ...
}

Данные JSON, передаваемые в теле, правильно десериализованы в объект Card с установленным свойством id.

Однако я хочу, чтобы у моего класса был другой регистр на имущество. На самом деле это выглядит так:

public class Card
{
    public string Id { get; set; }
}

Однако это не работает. Я попытался добавить различные атрибуты, чтобы попытаться контролировать это (включая [DataMember(Name="id")]), но, похоже, ничего не работает.

Есть ли способ управления именами свойств для десериализации JSON, выполненной для моего WebInvoke / service метода?

1 Ответ

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

Что ж, теперь я чувствую себя хромым ... Я исправил это!

[DataContract]
public class Card
{
    [DataMember(Name = "id")]
    public string Id { get; set; }
}

Мне не хватало атрибута DataContract, который, по-видимому, необходим для чтения атрибута DataMember!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...