【问题标题】:de-serializing error in asp.net mvc controlasp.net mvc控件中的反序列化错误
【发布时间】:2013-06-25 23:22:15
【问题描述】:

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

【问题讨论】:

    标签: asp.net-mvc jqgrid


    【解决方案1】:

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

    更新:您的代码中一个可能的错误是什么是您使用的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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      • 1970-01-01
      • 2020-08-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多