javascript - 序列化、反序列化 C#/JSON 对象并且没有大小写问题

标签 javascript c# asp.net-mvc entity-framework

当我编写 Javascript 函数时,我认为属性名称的约定是使用 pascalCase(第一个单词的第一个字母小写),但在创建 C# 属性时,应该使用 CamelCase(每个单词的第一个字母大写)。 )但是,两种语言都区分大小写,这会导致在将 Javascript 或 C# 对象序列化为 JSON 并返回时出现问题,因为大小写不匹配。

我对在 C# 对象上添加属性以将 C# CamelCase 属性映射到 Javascript pascalCase 形式的方法感到满意;它看起来干净、明确,让我在用每种语言写作时都能保持“总是这样”的方法,我觉得这有助于我减少错误,而且我喜欢一致性。但是,对于生成的对象(例如 Entity Framework 对象),这些对象是在没有这些属性的情况下生成的,如果我要添加它们,然后决定重新生成以获取数据库更改,我将丢失这些属性。 (我正在使用 Visual Studioo、ASP.NET MVC 和来自数据库的逆向工程代码“First”。)

我对所有这些技术都是新手。我想了解您如何轻松序列化这些对象的建议,以便我可以始终使用所需的大小写,即使对于生成的对象也是如此。在这种情况下有没有办法拥有这一切?

关于这个主题有很多问题,但我不确定这个特定的 Angular 是否已得到解决。

这是一个人为的示例,我在其中尝试学习这些主题:

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

最佳答案

您可以使用 JsonSerializerSettings 类的 ContractResolver 属性:

var settings = new JsonSerializerSettings{ ContractResolver = new CamelCasePropertyNamesContractResolver()  };
var s = JsonConvert.SerializeObject(object, settings);
var newObject = JsonConvert.DeserializeObject<type>(s, settings);

关于javascript - 序列化、反序列化 C#/JSON 对象并且没有大小写问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26332849/

相关文章:

javascript - VUE 在路由之间使用三个 JS 释放内存

javascript - 在 ajax 调用的脚本中调用 ajax 未正确运行 (PHP)

javascript - 如何在jquery中获取未选中的复选框值

c# - MVC EF 不断寻找 userId,这很昂贵

c# - 数据绑定(bind)引擎如何在后台运行?

c# - 通过 Entity Framework 插入当前数据库日期时间

javascript - 将 JS 函数绑定(bind)到 razor 文件中另一个脚本文件中的复选框

javascript - [Vue 警告] : Error in render function: "TypeError: Cannot read property ' matched' of undefined"

MVC 部分 View 中包含的 Javascript 仅在第一次运行

asp.net-mvc - ASP MVC 3 使用AJAX和JQUERY提交url参数