我正在使用EntityFramework,C#和MVC来构建一个Web应用程序。我需要在RAM中创建一个像这样的动态表
COL1 | COL2 | COL3... etc.
1 | Val | Val
2 | Val | Val
然后,我需要能够以下列格式读取/写入JSON:
[
{id:1, COL1: "Val", COL2: "Val", COL3: "Val" },
{id:2, COL1: "Val", COL2: "Val", COL3: "Val" }
];
我需要能够以这种格式读写表格,轻松地动态添加列和行。
我尝试使用DataTable
,但在序列化时会导致此错误:
错误:在序列化类型为' System.Reflection.RuntimeModule'的对象时检测到循环引用。
任何建议都将受到赞赏。
编辑:这是我用来构建导致错误的表的代码,即使在使用JSON.NET序列化时也是如此:
DataTable datatable = new DataTable();
datatable.Columns.Add("DBID");
datatable.Columns.Add("ROW");
datatable.Columns.Add("ID");
DataRow row = datatable.NewRow();
row["DBID"] = "Test";
row["ROW"] = "Test";
row["ID"] = "Test";
datatable.Rows.Add(row);
string json = JsonConvert.SerializeObject(datatable, Formatting.Indented); // <- Error here
return Content(json, "application/json");
编辑2 - 解决方案:
string json = JsonConvert.SerializeObject(datatable, Formatting.Indented,
new JsonSerializerSettings()
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
PreserveReferencesHandling = PreserveReferencesHandling.None
}
);
感谢alan和T.S.指出我正确的方向和其他所有回答的人!
答案 0 :(得分:3)
正如许多其他帖子中所提到的,您总是可以添加对JSON.NET的引用,该引用公开了以下方法:
var json = JsonConvert.SerializeObject(dataTableToConvertToJSON,
Formatting.Indented);
<强>更新强>
请尝试使用此代码。它应该处理你得到的错误:
var dataTableToConvertToJSON = JsonConvert.SerializeObject(dataTableToConvertToJSON,
Formatting.Indented,
new JsonSerializerSettings
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
});
要将Json作为字符串返回,请使用:
return json;
要返回Json对象,请使用:
return Json(dataTableToConvertToJSON, JsonRequestBehavior.AllowGet);
答案 1 :(得分:1)
就像变体一样,你的表可以像这样存储:
function getpdf(FileName,RemoteRefNumber) {
[...]
}
然后创建此类的列表,该列表示您的表:public class TestClass
{
public int Id { get; set; }
public Dictionary<string,string> CR { get; set; } //Columns And Rows
}
,然后使用自定义转换器对其进行序列化或反序列化。
答案 2 :(得分:0)
由于您要将数据导入/导出JSON,如何使用JavaScript在客户端执行此操作,但我不确定这是否适合您。但是,使用JavaScript进行此体操支持您需要动态添加col /属性,如果这是您绝对需要的。
否则,拥有一个简单的C#类并使用该类的对象构建列表,然后序列化列表也应该完成这项工作。