You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 13:34:56