【问题标题】:Passing Array from Javascript to C#将数组从 Javascript 传递到 C#
【发布时间】:2013-09-06 20:56:19
【问题描述】:

我有一个包含数组的 .js 脚本:

js的输出是这样的:

var foo=
[
    {
        "bar1":"value1",
        "bar2":"value2"
        // And so on...            
    }
]

我无法访问 js 源,因此无法输出为 JSON 和反序列化。

我只能使用WebClient 将其作为字符串获取,但我如何解析它并创建一个数组/字典并在 C# 中对其进行处理?

【问题讨论】:

  • 我相信你可以做到这一点:var foo = new JavaScriptSerializer().Deserialize<List<YourModelHere>>(YourString);
  • WebClient 得到的字符串是什么?因为你问怎么解析却不显示。
  • @I4V 字符串是js的输出。就像我写的一样。
  • @WiS3 string 是否以 "var foo = " 开头,还是它在 JavaScript 中的设置方式?
  • @DStanley 字符串以“var foo...”开头,它是纯文本,就像阅读一个.txt。

标签: c# javascript arrays


【解决方案1】:

您应该考虑致电WebClient.DownloadString。然后使用JSON.Net 或其他方式解析

按照那边提供的例子

string json = @"{
  ""Name"": ""Apple"",
  ""Expiry"": "2008-12-28T00:00:00",
  ""Price"": 3.99,
  ""Sizes"": [
    ""Small"",
    ""Medium"",
    ""Large""
  ]

}";
JObject o = JObject.Parse(json);
string name = (string)o["Name"];
// Apple
JArray sizes = (JArray)o["Sizes"];
string smallest = (string)sizes[0];

// Small

【讨论】:

    【解决方案2】:

    var foo = new JavaScriptSerializer().Deserialize<List<YourModelHere>>(YourString);

    【讨论】:

      【解决方案3】:

      您可以使用JavaScriptSerializer 来反序列化该字符串:

      string str=
      @"var foo = 
        [
          {
              ""bar1"":""value1"",
              ""bar2"":""value2""
      
          }
      ]";
      
      JavaScriptSerializer js = new JavaScriptSerializer();
      var o = js.Deserialize<Dictionary<string,string>[]>(str.Substring(str.IndexOf('[')));
      

      结果:

      Dictionary<String,String> (2 items)   
      
      Key    Value 
      ------ --------
      bar1   value1 
      bar2   value2 
      

      【讨论】:

      • D Stanley,我期待这个答案:) 但是无法使用 json 解析器解析 javascript。假设像"bar3": Math.max(a,b) 这样的行
      • @I4V 提供的示例没有嵌入代码 - 我已经用提供的示例测试了我的答案并且它有效。
      • D Stanley,我知道它有效,我只是说,OP 试图做错事,而您的答案适用于发布的示例(一个非常原始的字符串操作。能够将它传递给 json解析器)。您对此有何看法? I have a .js script that contain an array:。您是否希望您的答案适用于每个包含数组的 js
      猜你喜欢
      • 1970-01-01
      • 2012-02-10
      • 2012-08-03
      • 1970-01-01
      • 1970-01-01
      • 2017-05-07
      • 2016-11-05
      • 2015-04-10
      • 1970-01-01
      相关资源
      最近更新 更多