【问题标题】:Unable to extract values from object array, to which javascript array was deserialized无法从对象数组中提取值,javascript 数组已反序列化到该对象数组
【发布时间】:2015-08-29 16:02:31
【问题描述】:
var serializedArray = new JavaScriptSerializer().Deserialize<object[]>(filter);

变量filter的内容是[["Title","contains","foo"],"and",["Name","contains","foo"]]

serializedArray 的内容是"object[3]","and","object[3]"

serializedArray[0] 的内容是object[3],即"Title", "contains", "foo"

serializedArray可以与索引运算符一起使用,foreach适用。但不适用于serializedArray[0]

很有趣,serializedArrayserializedArray[0] 的类型都是 Object[]. 获取“Title”或“Name”值的方法是什么?

【问题讨论】:

  • 我删除了javascript 标签。这是一个关于 C# 的问题。

标签: c# arrays object serialization


【解决方案1】:
           var serializedArray = new JavaScriptSerializer().Deserialize<object[]>(filter);

            foreach (var item in serializedArray)
            {
               if (item is string)
               {
                  var element = item;
               }
               else
                  foreach (var innerItem in (object[])item)
                  {
                     var element = innerItem;
                  }
            }

【讨论】:

  • 嗨,裘德,您在另一个数组(嵌套数组)中有一个数组。因此,您需要在外部 foreach 循环中使用内部 foreach 循环来访问内部数组的元素。将内部数组转换为 object[] 以通过内部 foreach 对其进行迭代非常重要。
  • 在内部 foreach 中缺少对 object[] 的强制转换使其正常工作。编辑了答案以作为来自 UI 的变量过滤器的内容被接受,并带有所有这些反斜杠和双引号。
  • if (item is string) 检查是必要的,否则你会得到异常:Unable to cast object of 'System.String' to type 'System.Object []'。请相应地更新您的代码。
  • 好的。通常是的,但在我的情况下不是。因为我因为其他一些原因得到了另一张支票if (item.GetType() == typeof(Object[])),为了简单起见,我没有提到。我重新编辑了。
  • 哦好的,没问题:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-11
  • 2022-07-05
  • 2020-06-08
  • 1970-01-01
相关资源
最近更新 更多