1

我正在使用 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);
4

1 回答 1

0

我建议您验证userData您使用的类型。您没有发布您使用的更完整的 ASP.NET MVC 代码。我想数据(变量userData)已经被 ASP.NET MVC 反序列化为对象。JSON 规范(参见此处)非常简单。只有"\字符必须转义。还有一些其他字符可以转义(/例如)。我无法想象这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
于 2013-06-28T09:30:57.860 回答