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?

1
  • 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. Commented Dec 13, 2011 at 0:36

3 Answers 3

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

Sign up to request clarification or add additional context in comments.

Comments

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"}

Comments

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);
   }
});

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.