Проблема с сериализацией данных с использованием JSON.Net

Я использую планировщик Kendo в своем приложении для извлечения данных из моей базы данных с помощью веб-API. Я создал функцию Web Api и просто жестко запрограммировал некоторые данные, чтобы планировщик Kendo мог читать мои данные. Вот мой код для функции Api:

    [Route("api/v1/Events/GetPersonalEvents", Name = "ApiEventsGetPersonalEvents")]
    [HttpGet]
    public DataSourceResult GetPersonalEvents([System.Web.Http.ModelBinding.ModelBinder(typeof(WebApiDataSourceRequestModelBinder))]DataSourceRequest request)
    {
        var q = new ViewModels.Events.EventViewModel();
        q.Id = 1;
        q.Title = "This is a test";
        q.Start = DateTime.Now;
        q.End = DateTime.Now.AddHours(1);
        q.Description = "Test entry";

        var list = new List<ViewModels.Events.EventViewModel>();
        list.Add(q);
        return list.ToDataSourceResult(request);
    }

Планировщик кендо ничего не отображал в календаре. Используя Fiddler, я смог увидеть, что Kendo Scheduler вызывает мой API, а мой API возвращает данные. Вот отправка JSON:

{  
   "data":[  
      {  
         "id":1,
         "title":"This is a test",
         "description":"Test entry",
         "isAllDay":false,
         "start":"2016-11-18T15:31:33.1173519-08:00",
         "end":"2016-11-18T16:31:33.1178524-08:00",
         "startTimezone":null,
         "endTimezone":null,
         "recurrenceRule":null,
         "recurrenceException":null
      }
   ],
   "total":1,
   "aggregateResults":null,
   "errors":null
}

Казалось, все работает нормально. После дальнейшего расследования я наконец выяснил свою проблему. В моемglobal.asax.cs файл у меня есть такие строки:

HttpConfiguration config = GlobalConfiguration.Configuration;
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
config.Formatters.JsonFormatter.UseDataContractJsonSerializer = false;

Это заставляет JSON.Net автоматически преобразовывать имена C # в имена, дружественные к Javascript (например,Title становитсяtitle, Description становитсяdescriptionи тд ...), чего я и хочу. Однако, кендо, по-видимому, требует, чтобы имена были похожи на C # (например,Title вместоtitle). Я подтвердил это, комментируя эти три строки в моемglobal.asax.cs файл и все работало нормально.

Итак, я переключил свое внимание на мою модель представления. Я украсил свои свойства сJsonProperty атрибут, указывающий конкретное имя. Тем не менее, он все еще сериализуется как строчные имена. Вот вид модели кода:

public class EventViewModel : ISchedulerEvent
{
    [JsonProperty(PropertyName = "Id")]
    public int Id { get; set; }

    [JsonProperty(PropertyName = "Title")]
    public string Title { get; set; }

    [JsonProperty(PropertyName = "Description")]
    public string Description { get; set; }

    [JsonProperty(PropertyName = "IsAllDay")]
    public bool IsAllDay { get; set; }

    [JsonProperty(PropertyName = "Start")]
    public DateTime Start { get; set; }

    [JsonProperty(PropertyName = "End")]
    public DateTime End { get; set; }

    [JsonProperty(PropertyName = "StartTimezone")]
    public string StartTimezone { get; set; }

    [JsonProperty(PropertyName = "EndTimezone")]
    public string EndTimezone { get; set; }

    [JsonProperty(PropertyName = "RecurrenceRule")]
    public string RecurrenceRule { get; set; }

    [JsonProperty(PropertyName = "RecurrenceException")]
    public string RecurrenceException { get; set; }
}

Так что теперь у меня нет идей. Итак, есть ли способ заставить Json.Net правильно сериализовать мои имена, ТОЛЬКО для этого одного метода, или есть какой-то другой атрибут, который я могу использовать в моей модели представления для правильной сериализации имен, или в Kendo есть настройка, которая позволил бы Кендо использовать формат случая верблюда?

Ответы на вопрос(1)

Ваш ответ на вопрос