当我编写Javascript函数时,我相信约定是使用pascalCase作为属性名称(第一个字的较低首字母),但创建C#属性时,它应该是CamelCase(大写的每个单词的第一个字母)。但是,这两种语言都区分大小写,并且在将JavaScript或C#对象序列化为JSON时由于大小写不匹配而导致出现问题。序列化,反序列化C#/ JSON对象并没有套管问题
我满足于在我的C#对象上添加属性以将C#CamelCase属性映射到Javascript pascalCase窗体的方法;它看起来很干净,明确,并允许我在每种语言中编写“始终用这种方式”的方法,这让我减少了错误,并且我喜欢一致性。但是,对于生成的对象(例如实体框架对象),这些对象是在没有这些属性的情况下生成的,如果我要添加它们,然后决定重新生成以拾取数据库更改,则会丢失属性。 (我正在使用Visual Studioo,ASP.NET MVC和反向工程代码“First”from a database。)
我是所有这些技术的新手。我想建议您如何轻松地序列化这些对象,以便即使对于生成的对象也能够一致地使用所需的外壳。在这种情况下是否有办法让所有这些都成为现实?
在这个问题上有很多问题,但我不确定这个特定的角度已经解决。
这里是一个人为的例子,我打,试图了解这些主题:
function Person(name, age)
{
this.name = name;
this.age = age;
return this;
}
$(document).ready(function() {
/* Finds all of the controls whose IDs begin with PushMeButton */
$("[id^=PushMeButton]").click(function() {
//var id = $(this).attr('id');
var url = '/Home/Ajax/';
var joe = new Person("Joe", 98);
$.ajax({
type: 'POST',
url: url,
dataType: 'json',
data: joe,
success: function (person) {
alert('im back');
alert(person.age);
},
error: function (xhr, ajaxOptions, error) {
alert(xhr.status);
alert('Error: ' + xhr.responseText);
}
});
});
});
//Server:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Newtonsoft.Json;
using Restaurant.Data;
namespace MyApp.Controllers
{
public class Person
{
[JsonProperty(PropertyName = "name")]
public string Name
{
get;
set;
}
[JsonProperty(PropertyName = "age")]
public int Age
{
get;
set;
}
}
public class HomeController : Controller
{
[HttpPost]
public string Ajax(Person person)
{
person.Name = "Mr. " + person.Name;
person.Age += 10;
string personJson = JsonConvert.SerializeObject(person);
return personJson;
}
}
}
上面的代码会变成一个类像'class Test {public string MyProp {get; set;}}'到json'{myProp:...}',并且将其反序列化为'MyProp' c#属性。在这个例子中,我将serailization和deserialization线放在一起,仅仅向你展示如何执行两个操作。 – Luizgrs
看起来MVC(?)负责将服务器端的自动反序列化从JSON转换为C#对象,I只需要处理发送它在pascalCase,这似乎这样做。美丽。谢谢。 – ChadD