问题
I am using ASP.Net to serialize classes designed in C# to JSON. My Javascript application then requests those objects with AJAX. I have done this on a couple of projects now, but I run into the problem that the C# standard naming conventions use PascalCase for the public members, and in Javascript they are generally camelCase.
This particularly becomes an issue when I have some Javascript-only classes that use camelCase and some mixed-use classes that use PascalCase since I designed them in C# originally.
How does everyone else deal with this sort of problem? Do you just pick one or the other? If so which one is more broadly chosen? Or is there perhaps a clever way to user a JSON serializer to switch between the two naming conventions?
回答1:
You could use JSON.net to serialize the data for you, and you can even tell it to use camelCase. This question asks something similar. Here's a code example for reference:
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()
});
Don't worry about the performance of JSON.net either, as the performance of it versus native serialization is comparable (better in most cases).
回答2:
If you are using the DataContractJsonSerializer
, you can specify the name using the DataMemberAttribute.Name
property:
[DataContract]
public class User
{
[DataMember(Name = "user_id")]
public int UserId { get; set; }
[DataMember(Name = "user_name")]
public string UserName { get; set; }
}
will serialize to
{"user_id":123,"user_name":"John Doe"}
回答3:
I just use what the server gives me.
C#
public class Person
{
public string Name { get; set; }
public string Email { get; set; }
}
JS:
$.ajax({
...
success: function(data) {
var person = data;
alert(person.Name);
}
});
来源:https://stackoverflow.com/questions/8482668/how-do-you-handle-differing-naming-conventions-when-serializing-c-sharp-objects