Как вы обрабатываете различные соглашения об именах при сериализации объектов С# в JSON?
Я использую ASP.Net для сериализации классов, созданных на С#, для JSON. Затем приложение Javascript запрашивает эти объекты с помощью AJAX. Я сделал это на нескольких проектах сейчас, но я столкнулся с проблемой, что стандартные соглашения об именах С# используют PascalCase для публичных членов, а в Javascript они обычно являются camelCase.
Это особенно актуально, когда у меня есть только классы Javascript, которые используют camelCase и некоторые классы смешанного использования, которые используют PascalCase, так как я разработал их на С# изначально.
Как все остальные сталкиваются с такой проблемой? Вы просто выбираете один или другой? Если так, то какой из них более широко выбран? Или, может быть, есть умный способ для пользователя сериализатора JSON для переключения между двумя соглашениями об именах?
Ответы
Ответ 1
Вы можете использовать JSON.net для сериализации данных для вас, и вы даже можете сказать ему использовать camelCase. Этот вопрос задает нечто подобное. Вот пример кода для справки:
Product product = new Product {
ExpiryDate = new DateTime(2010, 12, 20, 18, 1, 0, DateTimeKind.Utc), Name = "Widget", Price = 9.99m, Sizes = new[] {
"Small", "Medium", "Large"
}
};
string json =
JsonConvert.SerializeObject(
product,
Formatting.Indented,
new JsonSerializerSettings {
ContractResolver = new CamelCasePropertyNamesContractResolver()
});
Не беспокойтесь о производительности JSON.net, так как производительность его по сравнению с собственной сериализацией сопоставима (лучше в большинстве случаев).
Ответ 2
Если вы используете DataContractJsonSerializer
, вы можете указать имя с помощью свойства DataMemberAttribute.Name
:
[DataContract]
public class User
{
[DataMember(Name = "user_id")]
public int UserId { get; set; }
[DataMember(Name = "user_name")]
public string UserName { get; set; }
}
будет сериализоваться на
{"user_id":123,"user_name":"John Doe"}
Ответ 3
Я просто использую то, что дает мне сервер.
С#
public class Person
{
public string Name { get; set; }
public string Email { get; set; }
}
JS:
$.ajax({
...
success: function(data) {
var person = data;
alert(person.Name);
}
});