Можно ли получить результаты WCF DataServices JSON, чтобы всегда возвращать camelCase?

Я надеюсь использовать конечную точку OData, размещенную WCF DataServices, в моем проекте, вызывая ее из внешнего интерфейса javascript. Важно, чтобы имена свойств объектов JSON соответствовали соглашениям Javascript, а не соглашениям C#, т.е.:

ThisIsAProperty должно заканчиваться: thisIsAProperty

И наоборот, объекты C# должны сохранять идиоматические соглашения об именах C#.

Также важно, чтобы достижение этой цели не приводило к дублированию намерений в моем коде C#. Например, добавление атрибутов к каждому свойству, которые просто переформулируют имя свойства в camelCase, неприемлемо.

Я могу сделать это довольно легко, используя ASP.NET MVC и сериализатор Newtonsoft JSON, просто нажав переключатель во время сериализации.

Есть ли такой способ гарантировать, что данные всегда сериализуются в JSON с именами атрибутов camelCase?


person brendanjerwin    schedule 15.07.2011    source источник


Ответы (2)


Да, внедрите ISerializable и определите свои значения в случае верблюда:

[Serializable]
public class MyObject : ISerializable 
{
  public int n1;
  public int n2;
  public String str;

  public MyObject()
  {
  }

  protected MyObject(SerializationInfo info, StreamingContext context)
  {
    n1 = info.GetInt32("camelCase1");
    n2 = info.GetInt32("propertyValue2");
    str = info.GetString("kK");
  }
[SecurityPermissionAttribute(SecurityAction.Demand,SerializationFormatter=true)]
public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
  {
    info.AddValue("camelCase1", n1);
    info.AddValue("propertyValue2", n2);
    info.AddValue("kK", str);
  }
}
person Joe    schedule 15.07.2011

Службы данных WCF чувствительны к регистру, поэтому изменение регистра между сервером и клиентом javascript на самом деле не вариант.

Однако WCF DS просто привязывается к базовой модели данных, поэтому, если вы можете контролировать это, вы можете очень легко сделать все в CamelCase в модели данных. т.е. зайдите в конструктор EF и установите все, что дает всем EntitySets, Properties и Relationships имена camelCase.

Вероятно, это не то, что вы ищете, хотя это повлияет и на любой код C #... - Алекс

person Alex James    schedule 15.07.2011