以编程方式构建表以从JSON导出/导入?

时间:2015-10-01 19:58:40

标签: c# .net json entity-framework model-view-controller

我正在使用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.指出我正确的方向和其他所有回答的人!

3 个答案:

答案 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 } ,然后使用自定义转换器对其进行序列化或反序列化。

P.S:阿兰的想法更好)

答案 2 :(得分:0)

由于您要将数据导入/导出JSON,如何使用JavaScript在客户端执行此操作,但我不确定这是否适合您。但是,使用JavaScript进行此体操支持您需要动态添加col /属性,如果这是您绝对需要的。

否则,拥有一个简单的C#类并使用该类的对象构建列表,然后序列化列表也应该完成这项工作。