gpt4 book ai didi

c# - 为什么 DataContractJsonSerializer 和 toSource 产生不同的结果?

转载 作者:行者123 更新时间:2023-11-29 10:22:56 25 4
gpt4 key购买 nike

我需要将 javascript 对象传递给 ASP.NET MVC,我想这样做:

var p = { account:'123', page:'item' }; 
var message = escape(p.toSource());
// pass message to action method

这会产生类似这样的内容(为了便于阅读而未转义):

({account:"123", page:"item"})

在 ASP.NET MVC 中,我试图反序列化它但失败了。首先,DataContractJsonSerializer 提示括号,没问题,在通过之前删除:

{account:"123", page:"item"}

然后它提示 a 而不是 ",所以我尝试使用它序列化 datacontract,并得到:

{"account":"123", "page":"item"}

所以,问题是,我可以在 ASP.NET MVC 中使用一些可以与 javascript toSource 格式一起使用的东西,还是我从头开始做错了?

最佳答案

So, question is, can i use something in ASP.NET MVC, that would work with javascripts toSource format, or am I doing it from scratch wrong?

DataContractJsonSerializer class 在 JSON 格式方面非常严格,并且符合规范。例如:

{account:"123", page:"item"}

根据规范是无效的 JSON。您必须在属性名称周围加上双引号。您可以使用 JSON.stringify 来生成有效的 JSON:

var p = { account:'123', page:'item' }; 
var message = JSON.stringify(p);

这将生成 {"account":"123","page":"item"} 现在是有效的 JSON。 JSON.stringify 函数原生内置于现代浏览器中,如果你想支持旧版浏览器,你可以包括 json2.js进入您的页面。

也就是说,您可以使用不太严格的 JavaScriptSerializer类,或 Json.NET它将接受您无效的 JSON 字符串:

public class MyModel
{
public string Account { get; set; }
public string Page { get; set; }
}

class Program
{
static void Main()
{
var json = "{account:\"123\", page:\"item\"}";
var serializer = new JavaScriptSerializer();
var model = serializer.Deserialize<MyModel>(json);
Console.WriteLine("account = {0}, page = {1}", model.Account, model.Page);
}
}

话虽如此,我不知道您为什么要手动反序列化 JSON 而不是依赖内置的 JsonValueProviderFactory :

[HttpPost]
public ActionResult MyAction(MyModel model)
{
...
}

并使用 AJAX 从 javascript 调用:

$.ajax({
url: '@Url.Action("MyAction", "Home")',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({ account: "123", page: "item" }),
success: function(result) {
// TODO: process the results
}
});

看,现在您不再需要担心任何手动序列化/反序列化。一切都由框架为您处理。

关于c# - 为什么 DataContractJsonSerializer 和 toSource 产生不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7768290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com