C#中处理DataSet双表空值并序列化JSON的实现方案
DataSet空表处理与JSON序列化实现
问题描述
我有一个DataSet,会返回Table和Table1两张表,存在三种场景:Table为空、Table1为空、两张表都有数据。需要处理这些空表情况,将处理后的DataSet序列化为JSON字符串。现有代码如下:
public JsonResult GetSPanInfoByFTTX_FE_NEW(string FSA_ID) { string strJsonData = ""; try { CTManagement objCT = new CTManagement(); DataSet ds = objCT.GetSPanInfo_FTTX_FE(FSA_ID); // 需在此处处理空表 strJsonData = JsonConvert.SerializeObject(ds, Formatting.None); } catch (Exception e) { ErrorLog.HandleErrorLog("", "", "yy", e.Message); ApplicationLog.Error("Error", "yy", e.Message); } return Json(strJsonData, JsonRequestBehavior.AllowGet); }
场景示例(翻译后)
- 场景1:原内容
{'Table':[],'Table1':[{'FSA_ID':'GWLR0115','AR_LENGTH':0.0}]}
翻译:{'Table': [], 'Table1': [{'FSA_ID':'GWLR0115','AR_LENGTH':0.0}]}(Table为空表,Table1包含一条数据) - 场景2:原内容
{'Table':[{'FSA_ID':'GWLR0115','UG_LENGTH':0.0}],'Table1':[]}
翻译:{'Table': [{'FSA_ID':'GWLR0115','UG_LENGTH':0.0}], 'Table1': []}(Table包含一条数据,Table1为空表)
解决方案
Newtonsoft.Json序列化DataSet时,若DataTable带有列结构但无数据,会自动序列化为空数组[],完全匹配场景示例的格式要求。如果你的GetSPanInfo_FTTX_FE方法返回的DataSet始终包含Table和Table1(即使空数据但保留列结构),直接序列化即可;若存在表缺失的极端情况,可手动添加表和对应列保证JSON结构完整。
修改后的代码如下:
public JsonResult GetSPanInfoByFTTX_FE_NEW(string FSA_ID) { string strJsonData = ""; try { CTManagement objCT = new CTManagement(); DataSet ds = objCT.GetSPanInfo_FTTX_FE(FSA_ID); // 确保Table存在且列结构完整(根据实际业务列调整) if (!ds.Tables.Contains("Table")) { DataTable table = ds.Tables.Add("Table"); table.Columns.Add("FSA_ID", typeof(string)); table.Columns.Add("UG_LENGTH", typeof(double)); } // 确保Table1存在且列结构完整(根据实际业务列调整) if (!ds.Tables.Contains("Table1")) { DataTable table1 = ds.Tables.Add("Table1"); table1.Columns.Add("FSA_ID", typeof(string)); table1.Columns.Add("AR_LENGTH", typeof(double)); } // 序列化DataSet,空表自动转为[] strJsonData = JsonConvert.SerializeObject(ds, Formatting.None); } catch (Exception e) { ErrorLog.HandleErrorLog("", "", "yy", e.Message); ApplicationLog.Error("Error", "yy", e.Message); } return Json(strJsonData, JsonRequestBehavior.AllowGet); }
补充说明
- 若业务中
GetSPanInfo_FTTX_FE一定会返回带列结构的Table和Table1,可删除手动添加表和列的代码块,直接序列化即可得到符合要求的JSON。 - 手动添加列是为了兼容极端场景:当方法返回的DataSet缺失某张表时,保证JSON中仍能生成对应空数组节点。
内容的提问来源于stack exchange,提问作者Nadeem
相关产品推荐
相关产品推荐

