在将c#对象序列化为JSON时,如何处理不同的命名约定?
How do you handle differing naming conventions when serializing C# objects to JSON?
我使用的是ASP。Net将c#设计的类序列化为JSON。然后,我的Javascript应用程序用AJAX请求这些对象。我现在已经在几个项目中这样做了,但是我遇到了一个问题,c#标准命名约定对公共成员使用PascalCase,而在Javascript中它们通常是camelCase。
当我有一些只使用camelCase的javascript类和一些使用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);
}
});
相关文章:
- JavaScript命名约定;静态“;类或模块
- 命名约定的Web标准
- Javascript中的变量命名约定;jQuery
- 角度模块依赖项的命名约定
- Javascript ES6 的属性和支持值命名约定
- 自定义咕噜声任务命名约定
- Laravel和变量命名约定(蛇格+骆驼格)
- JavaScript事件命名约定
- backbone.js的命名约定(在rails上)
- .NET 商店中的 JavaScript 命名约定
- 如何使用此命名约定验证表单客户端
- Requirejs、jshint 和命名约定
- Javascript 模拟命名约定
- 使用 nodejs 时的 JavaScript 命名约定
- 不是一个正确的命名约定,但它工作正常,如果它有效,命名约定如何以及需要什么
- 在html/css/javascript的命名约定中不使用连字符时
- NPM脚本命名约定
- 用于区分节点JS中模块/实例/方法变量的命名约定
- 本地变量的常规javascript jQuery命名约定是什么
- 在将c#对象序列化为JSON时,如何处理不同的命名约定?