在将C#对象序列化为JSON时,如何处理不同的命名约定?

我正在使用ASP.Net将C#中设计的类序列化为JSON。 我的Javascript应用程序然后使用AJAX请求这些对象。 我现在在几个项目上完成了这个,但是我遇到了C#标准命名约定为公共成员使用PascalCase的问题,而在Javascript中它们通常是camelCase。

当我有一些使用camelCase的Javascript-only类和一些使用PascalCase的混合使用类时,这尤其成为一个问题,因为我最初在C#中设计它们。

其他人如何处理这类问题? 你只挑选一个或另一个? 如果是这样,哪一个被更广泛地选择? 或者是否有一种聪明的方法来使用JSON序列化程序在两种命名约定之间切换?

您可以使用JSON.net为您序列化数据,甚至可以告诉它使用camelCase。 这个问题提出了类似的问题 。 这是一个代码示例供参考:

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

不要担心JSON.net 的性能,因为它与本机序列化的性能相当(在大多数情况下更好)。

如果您使用的是DataContractJsonSerializer ,则可以使用DataMemberAttribute.Name属性指定名称:

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

将序列化为

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

我只是使用服务器给我的东西。

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