2011-12-12 6 views
15

Estoy usando ASP.Net para serializar las clases diseñadas en C# a JSON. Mi aplicación de Javascript luego solicita esos objetos con AJAX. He hecho esto en un par de proyectos ahora, pero me encuentro con el problema de que las convenciones de nomenclatura estándar de C# usan PascalCase para los miembros públicos, y en Javascript generalmente son camelCase.¿Cómo se manejan las diferentes convenciones de nomenclatura al serializar objetos C# a JSON?

Esto particularmente se convierte en un problema cuando tengo algunas clases de solo Javascript que usan camelCase y algunas clases de uso mixto que usan PascalCase ya que las diseñé originalmente en C#.

¿Cómo lidian todos los demás con este tipo de problema? ¿Escoges uno o el otro? Si es así, ¿cuál es más ampliamente elegido? ¿O existe una forma inteligente de utilizar un serializador JSON para alternar entre las dos convenciones de denominación?

+0

Eso es definitivamente una cuestión de opinión. a la deriva y TerryR tienen razón. Es una cuestión de preferencia más que nada. Personalmente lo hago de la manera que sugiere TerryR. – Xcalibur37

Respuesta

12

Puede usar JSON.net para serializar los datos por usted, e incluso puede decirle que use camelCase. This question pregunta algo similar. Aquí está un ejemplo de código de referencia:

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

No se preocupe por el desempeño de JSON.net tampoco, como the performance of it versus native serialization es comparable (mejor en la mayoría de los casos).

5

Solo uso lo que el servidor me da.

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

Si está utilizando el DataContractJsonSerializer, puede especificar el nombre utilizando la propiedad DataMemberAttribute.Name:

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

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

serializará a

{"user_id":123,"user_name":"John Doe"} 
Cuestiones relacionadas