15

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?

Code Commander
  • 16,771
  • 8
  • 64
  • 65
  • That is definitely a matter of opinion. adrift and TerryR are both right. It's a matter of preference more than anything. I personally do it the way TerryR suggests. – Xcalibur37 Dec 13 '11 at 00:36

3 Answers3

12

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).

Community
  • 1
  • 1
JesseBuesking
  • 6,496
  • 4
  • 44
  • 89
10

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"}
Jeff Ogata
  • 56,645
  • 19
  • 114
  • 127
5

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);
   }
});
Terry
  • 14,099
  • 9
  • 56
  • 84