How do you handle differing naming conventions when serializing C# objects to JSON?

为君一笑 提交于 2020-01-12 04:30:07

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!