2011-12-12 12 views
15

Używam ASP.Net do serializacji klas zaprojektowanych w języku C# do JSON. Moja aplikacja JavaScript następnie żąda tych obiektów z AJAX. Zrobiłem to już w kilku projektach teraz, ale napotkam problem, że konwencje nazewnictwa C# używają PascalCase dla członków publicznych, aw JavaScript są one ogólnie camelCase.Jak radzisz sobie z różnymi konwencjami nazewnictwa podczas serializacji obiektów C# do JSON?

To szczególnie staje się problemem, gdy mam kilka klas JavaScript, które używają camelCase i kilka klas o mieszanym użyciu, które używają PascalCase, ponieważ zaprojektowałem je w C# pierwotnie.

Jak wszyscy inni mają do czynienia z tego rodzaju problemem? Czy wybierasz tylko jedną lub drugą? Jeśli tak, który z nich jest szerzej wybrany? A może istnieje sprytny sposób na skorzystanie z serializatora JSON, aby przełączać się między dwiema konwencjami nazewnictwa?

+0

To zdecydowanie kwestia opinii. dryfujący i TerryR mają rację. To kwestia preferencji bardziej niż cokolwiek innego. Osobiście robię to tak, jak sugeruje TerryR. – Xcalibur37

Odpowiedz

12

Możesz użyć JSON.net do serializacji danych dla Ciebie, a możesz nawet powiedzieć, aby użyć CamelCase. This question prosi o coś podobnego. Oto przykładowy kod dla odniesienia:

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

nie martw się o wydajności Json.NET albo, jak the performance of it versus native serialization jest porównywalna (lepiej w większości przypadków).

5

Używam tylko tego, co daje mi serwer.

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

Jeśli używasz DataContractJsonSerializer można określić nazwę za pomocą właściwości DataMemberAttribute.Name:

[DataContract] 
public class User 
{ 
    [DataMember(Name = "user_id")] 
    public int UserId { get; set; } 

    [DataMember(Name = "user_name")] 
    public string UserName { get; set; } 
} 

będzie serializacji do

{"user_id":123,"user_name":"John Doe"} 
Powiązane problemy