将C#字符串转换为Javascript对象/JSON

将C#字符串转换为Javascript对象/JSON,c#,json,jquery,javascriptserializer,C#,Json,Jquery,Javascriptserializer,我有一个Javascript对象,如下所示: var jsonDataActual = { "source": [{ "name": "testCaption0", "desc": "testDescrip0", "values":

我有一个Javascript对象,如下所示:

var jsonDataActual = { 
                       "source": [{
                                    "name": "testCaption0", 
                                    "desc": "testDescrip0", 
                                    "values": [{ 
                                                 "from": "/Date(1338811241074)/", 
                                                   "to": "/Date(1346760041074)/", 
                                                "label": "testLabel0", 
                                          "customClass": "GanttRed"
                                               }] 
                                 }], 
                       "navigate": "scroll", 
                        "scale": "weeks", 
                        "maxScale": "months", 
                        "minScale": "days", 
                    "itemsPerPage": 11, 
                     "onItemClick": function (data) { }, 
                      "onAddClick": function (dt, rowId) { } 

                 };
return  new JavaScriptSerializer().Serialize(jsonData);
这对我来说很好。现在,由于我的要求和需要,我将整个对象(包括大括号,即{}和分号;)作为服务器端(C#)上的字符串,并使用服务器端方法将其返回到ajax调用(web方法):

在服务器端方法中,我执行以下操作:

var jsonDataActual = { 
                       "source": [{
                                    "name": "testCaption0", 
                                    "desc": "testDescrip0", 
                                    "values": [{ 
                                                 "from": "/Date(1338811241074)/", 
                                                   "to": "/Date(1346760041074)/", 
                                                "label": "testLabel0", 
                                          "customClass": "GanttRed"
                                               }] 
                                 }], 
                       "navigate": "scroll", 
                        "scale": "weeks", 
                        "maxScale": "months", 
                        "minScale": "days", 
                    "itemsPerPage": 11, 
                     "onItemClick": function (data) { }, 
                      "onAddClick": function (dt, rowId) { } 

                 };
return  new JavaScriptSerializer().Serialize(jsonData);
但是现在,整个返回的数据(在
Success:function(msg){var s=msg.d}
中)被视为字符串,因此它不起作用

我试过这些:

  1. var obj = eval('{' + msg.d +'}'); (removing beginning and ending braces in msg.d)
         typeof(obj) is string. failed

  2. eval('var obj ='+msg.d);  (including beginning and ending braces in msg.d)
         typeof(obj) is string. failed

  3. var obj= jQuery.parseJson(msg.d);
        typeof(obj) is string. failed
  4. var obj = new Object();
     //var obj = {}; 
      obj=jQuery.parseJson(msg.d).
      typeof(obj) is string. failed.
请帮忙。如何将服务器端返回的json转换为对象

为什么它对我不起作用??。这是因为我的json对象的结构吗

为什么
jsonDataActual
对我有效,但在作为字符串发送时却不起作用

我看到了

请帮助……

试试这个

var json=(typeof msg.d) == 'string' ? eval('(' + msg.d + ')') : msg.d;

我以前遇到过很多次。当WCF服务将返回的数据解密为JSON时,字符串数据周围将始终有“”。您应该始终从WCF服务返回对象或对象列表,即使这些对象是在您的服务级别创建的自定义对象

因此,您的服务应该是,比如:

[OperationContract]
        [WebGet(BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "/Test?testId={testId}", RequestFormat = WebMessageFormat.Json,
                   ResponseFormat = WebMessageFormat.Json)]
        List<TestObjectJSON> Test(int testId);
[运营合同]
[WebGet(BodyStyle=WebMessageBodyStyle.Bare,UriTemplate=“/Test?testId={testId}”,RequestFormat=WebMessageFormat.Json,
ResponseFormat=WebMessageFormat.Json)]
列表测试(int-testId);
然后,这将在服务端为您执行反序列化,而不使用序列化程序

如何将服务器端返回的json转换为对象

您可以使用
JSON.parse
来实现这一点

例如:

a = [1, 2];
x = JSON.stringify(a); // "[1,2]"
o = JSON.parse(x); // [1, 2];

找到了我具体问题的解决方案

我正在构造一个字符串变量,将json数据作为它的值。然后我将这个字符串返回给客户端函数(发出ajax请求的函数)。i、 e

服务器端方法

[WebMethod]
public static string GetJsonData()
{
    string jsonData = String.Empty;
    foreach(var dataItem in objEntireData.Items)
    {
         //  jsonData +=  
    }
   return new JavaScriptSerializer().Serialize(result);
} 
但它不起作用。因此,我没有构造字符串变量并序列化它,而是编写了一个具有特定结构的类,并在return语句中发送它(序列化后)

i、 e.见下文

    public class A
    {
        public A()
        {
            Values = new List<B>();
        }
        public string prop1 {get; set;}
        public List<B> Values { get; set; }
    }
    public class B
    {
        public string prop2 { get; set; }
        public string prop3 { get; set; }
    }

1.这对我没用。通常,typeof(json)是字符串,这意味着eval没有将我的字符串转换为objectgod。即使是JSON.parse也没有帮助。同样,我得到的字符串是JSON.parse(msg.d)的结果,而不是一个对象。goddd你想要一个对象是什么意思?您可以使用
var o={“s”:“string here”};//现在o.s=“在这里串”哇…请阅读问题goldenparrot。此外,var o={“s”:“string here”},对我来说没有用,我希望“string here”是一个对象,而不是包含在另一个对象中。i、 e.“string here”中有许多键和值,我需要访问它们。我希望我说的有道理!我的错误。顺便说一句,您可以试试:
var obj=jQuery.parseJson(jQuery.parseJson(msg.d))@thexdixon..请参阅我没有使用WCF或Web服务。我的方法只是保存在aspx页面上。我不太确定解析是如何在WebMethod上完成的,但是如果您使用的是.NET4+,那么我可以想象它是与服务相同的序列化。你能不能试着快速地使用自定义对象方法,看看效果如何?