C# 转换为JSON数组,而不是常规对象
我已经使用这个实用程序格式化了数据表。它有一个很好的选项,允许您转换为JSON或JSON数组。这个JSON数组就是我想要的。当我使用JSON.Net之类的实用程序进行序列化时,它们会给我标准的JSON格式。我不想这样——我只想要数组,这样我基本上可以在javascript中重现一个表布局 下面是示例表数据结构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 我希望序列化
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。这对我来说确实是最好的解决方案,我想,但我就是做不到。