【发布时间】:2014-11-19 22:30:12
【问题描述】:
我已使用此实用程序http://www.convertcsv.com/csv-to-json.htm 来格式化数据表。它具有允许您转换为 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
}
]
我的问题是,有没有人知道一种去除列名并使其像我展示的简单二维数组一样的方法?
数据结构是直接取自 sql 命令db.Query("SELECT * FROM my_table") 的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;
}
【问题讨论】:
-
你认为 C# 不能做什么?你得到一个编译器错误吗?告诉我们哪个错误。
-
我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
-
在 javascript 中,如果你有一个变量 spaceship,你可以访问属性 "x",比如 c# spaceship.x 或 spaceship["x"] 中的 c# spaceship["x"] 不起作用 - 我试过了枚举,但得到一个错误,即有一个 nil 值。
-
在 C# 中,您可以使用 Reflection 执行此操作,甚至更多。您当然可以处理任意对象的所有属性。它只是不使用与 JavaScript 相同的语法。
-
我试过了,但我遇到了麻烦。
JSONString += item.GetType().GetProperty(fieldName).GetValue(item, null);其中item是IEnumerable<Object>中的一行 引发空引用异常。你知道那会是什么吗? item 变量在调试器中不为空。我认为这对我来说确实是最好的解决方案,但我无法让它发挥作用。
标签: c# asp.net json serialization