在asp.net mvc控件中反序列化错误

时间:2013-06-28 08:28:11

标签: asp.net-mvc jqgrid

我正在使用jqGrid,并使用getRowData我正在获取jqGrid数据。之后我申请JSON.stringify(rowData),最后得到结果:

[
    {
        "FIRST_NAME": "Krish",
        "LAST_NAME": "Patil",
        "EMPLOYEE_TYPE": "Consultant",
        "TITLE": "Application Resource",
        "LOCATION": "USA ",
        "CENTER_NAME": "Application Development & Testing",
        "EMAIL": "goal@test.com",
        "COMMENTS": "testing"
    }
]

它在'JavaScript'中正如预期的那样正常工作。但是,一旦我将此数据发送到控制器并尝试对其进行反序列化,我将收到一个未终止的字符串错误"CENTER_NAME":"Application Development .. 由于'&'(特殊字符)正在发生。我如何解决这个问题,请提供相同的建议。

------去序列化代码------------

 JavaScriptSerializer ser = new JavaScriptSerializer();
 UserData result = ser.Deserialize<UserData>(userData);

1 个答案:

答案 0 :(得分:0)

我建议您验证您使用的userData的类型。您没有发布更多使用的完整ASP.NET MVC代码。我认为ASP.NET MVC已经将数据(变量userData)反序列化为对象。 JSON规范(参见here)非常简单。只有"\个字符必须转义。还有一些可以转义的其他字符(例如/)。我无法想象JavaScriptSerializer可能有错误处理&字符的错误。

更新:您的代码中的一个可能的错误是 您使用的UserData类。可能代码应该是

List<UserData> result = ser.Deserialize<List<UserData>>(userData);

而不是

UserData result = ser.Deserialize<UserData>(userData);

因为您发送了一系列项目。以任何方式使用代码

的程序
using System;
using System.Collections.Generic;
using System.Web.Script.Serialization;

namespace DeserializationTest {
    public class UserData {
        public string FIRST_NAME;
        public string LAST_NAME;
        public string EMPLOYEE_TYPE;
        public string TITLE;
        public string LOCATION;
        public string CENTER_NAME;
        public string EMAIL;
        public string COMMENTS;
    };

    class Program {
        static void Main () {
            const string userData = "[{\"FIRST_NAME\": \"Krish\",\"LAST_NAME\": \"Patil\",\"EMPLOYEE_TYPE\": \"Consultant\",\"TITLE\": \"Application Resource\",\"LOCATION\": \"USA \",\"CENTER_NAME\": \"Application Development & Testing\",\"EMAIL\": \"goal@test.com\",\"COMMENTS\": \"testing\"}]";
            var ser = new JavaScriptSerializer();
            var result = ser.Deserialize<List<UserData>>(userData);
            Console.WriteLine("result[0].CENTER_NAME={0}", result[0].CENTER_NAME);
        }
    }
}

无异常,并在控制台上显示以下文字:

result[0].CENTER_NAME=Application Development & Testing