Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 转换为JSON数组,而不是常规对象_C#_Asp.net_Json_Serialization - Fatal编程技术网

C# 转换为JSON数组,而不是常规对象

C# 转换为JSON数组,而不是常规对象,c#,asp.net,json,serialization,C#,Asp.net,Json,Serialization,我已经使用这个实用程序格式化了数据表。它有一个很好的选项,允许您转换为JSON或JSON数组。这个JSON数组就是我想要的。当我使用JSON.Net之类的实用程序进行序列化时,它们会给我标准的JSON格式。我不想这样——我只想要数组,这样我基本上可以在javascript中重现一个表布局 下面是示例表数据结构 column1 column2 column3 c1r1 c2r1 c3r1 c1r2 c2r2 c3r2 c1r3 c2r3 c3r3 我希望序列化

我已经使用这个实用程序格式化了数据表。它有一个很好的选项,允许您转换为JSON或JSON数组。这个JSON数组就是我想要的。当我使用JSON.Net之类的实用程序进行序列化时,它们会给我标准的JSON格式。我不想这样——我只想要数组,这样我基本上可以在javascript中重现一个表布局

下面是示例表数据结构

column1 column2 column3
c1r1    c2r1    c3r1
c1r2    c2r2    c3r2
c1r3    c2r3    c3r3
我希望序列化时的外观如下所示:

[[c1r1,c2r1,c3r1],
 [c1r2,c2r2,c3r2],
 [c1r3,c2r3,c3r3]]
但是使用JSON.net等实用工具的标准序列化方法是

[
  {
    column1:c1r1,
    column2:c2r1,
    column3:c3r1
  },
  {
    column1:c1r2,
    column2:c2r2,
    column3:c3r2
  },
  {
    column1:c1r3,
    column2:c2r3,
    column3:c3r3
  }
]
我的问题是,有没有人知道一种剥离列名的方法,让它像我展示的简单2d数组一样

数据结构是直接从sql命令db.QuerySELECT*from my_表中获取的IEnumerable

注意:我希望有一个通用函数可以做到这一点——我知道如何做到这一点,但我正在进行的项目需要以同样的方式为许多人做到这一点。我试图编写自己的方法来实现它,但由于c语言的局限性,它没有起作用

    public static string fromListToJSONArray(IEnumerable<Object> listToUse, string[] fieldNames)
    {
        string JSONString = "[";
        foreach (var item in listToUse)
        {
            JSONString += item[fieldName[0]]; //This is the line you can't do in c#!!  Don't know how to go around this.
        }
        JSONString += "]";
        return JSONString;
    }

您试图输出的是一个数组数组。在您的例子中,从一个或多个可枚举记录开始,它看起来像是包含名为column1、column2、column3的列

如果查询将生成一个已知的结果集,那么您可以在转换为JSON之前将每一行简单地转换为一个数组

var qry = /*Enumerable of some database query*/
return from rec in wry
    select new string[] 
    {
      rec.column1, 
      rec.column2, 
      rec.column3
    };

我想你是在问类似的问题


您必须从json手动组装数组。

我发现解决方案-IEnumerable类型需要是动态的。从这里开始,这很简单

public static string fromListToJSONArray(IEnumerable<dynamic> listToUse)
    {
        string JSONString = "[";
        foreach (var item in listToUse)
        {
            if(isFirst == false)
                JSONString += ",";
            else
                isFirst = false;
            JSONString += "\"" + item[0] + "\"";
        }
        JSONString += "]";
        return JSONString;
        JSONString += "]";
        return JSONString;
    }

如果您希望它是泛型的,那么您需要使用反射来获取rec对象上的每个属性,或者使用数据适配器用DataAdapter或数据读取器填充DataTable,您可以检索列元素。感谢bigtlb,除非您需要知道列名,否则我将研究thoseI将使用的方法。这些列只是一个基于0的数组。你可以试着把它们当作字符串来读。你认为C到底不能做什么?你有编译器错误吗?告诉我们哪个错误。我已经编辑了你的标题。请看,在javascript中,如果你有一个变量spaceship,你可以像这个spaceship一样访问属性x。x或spaceship[x]在c spaceship[x]中不起作用-我尝试了枚举,但得到了一个错误,即有一个nil值。在c中,你可以使用反射来实现这一点,甚至更多。您当然可以处理任意对象的所有属性。它只是没有使用与JavaScript相同的语法。我试过了,但遇到了麻烦。JSONString+=item.GetType.GetPropertyfieldName.GetValueitem,null;其中item是IEnumerable中的一行,将引发null引用异常。你知道那是怎么回事吗?调试器中的项变量不为null。这对我来说确实是最好的解决方案,我想,但我就是做不到。