如何在C#中将SQL Server的FOR JSON AUTO结果转换为模型类
问题:将SQL Server生成的JSON转换为C#模型实例
我在SQL Server中编写了一段查询语句获取表和列信息,通过FOR JSON AUTO生成JSON结果,查询代码如下:
DECLARE @test2 varchar(max) = ( SELECT DISTINCT ba.TABLE_NAME AS Tabla, detalle.COLUMN_NAME AS Columna FROM INFORMATION_SCHEMA.COLUMNS AS ba LEFT JOIN INFORMATION_SCHEMA.COLUMNS AS detalle ON detalle.TABLE_NAME = ba.TABLE_NAME WHERE ba.TABLE_CATALOG = 'tcGenerales' AND ba.TABLE_NAME NOT IN ( 'Bitacora', 'Version' ) FOR JSON AUTO ); SELECT @test2 AS JsonRes;
生成的JSON结果结构如下:
[ { "Tabla": "CA_Asentamiento", "Detalle": [ { "Columna": "Asentamiento" }, { "Columna": "CodigoPostal" } ] }, { "Tabla": "CA_ClaveProductoServicio", "Detalle": [ { "Columna": "Clave" }, { "Columna": "Descripcion" }, { "Columna": "FechaAlta" } ] } ]
我已在C#中定义了如下模型类:
public class TablaDTO { public string Tabla { get; set; } public List<Detalle> Detalle { get; set; } } public class Detalle { public string Columna { get; set; } }
请问如何将上述JSON转换为对应的C#模型类实例?
解决方案
C#中有两种主流的JSON序列化库可以完成这个转换,以下是具体实现步骤:
方式一:使用Newtonsoft.Json(Json.NET)
- 通过NuGet安装Newtonsoft.Json包:
Install-Package Newtonsoft.Json - 调用反序列化方法完成转换:
using Newtonsoft.Json; using System.Collections.Generic; // 替换为从SQL查询获取到的实际JSON字符串 string jsonString = "..."; List<TablaDTO> tablaList = JsonConvert.DeserializeObject<List<TablaDTO>>(jsonString);
方式二:使用System.Text.Json(.NET Core 3.0+/.NET 5+内置)
- 无需额外安装包,直接使用内置命名空间:
using System.Text.Json; using System.Collections.Generic; // 替换为从SQL查询获取到的实际JSON字符串 string jsonString = "..."; List<TablaDTO> tablaList = JsonSerializer.Deserialize<List<TablaDTO>>(jsonString);
注意事项
- 确保JSON中的键名(
Tabla、Detalle、Columna)与C#模型类的属性名完全匹配,System.Text.Json默认大小写敏感,Newtonsoft.Json默认不敏感但建议保持一致。 - 若JSON可能包含空值,建议给模型类属性设置可空类型或默认值,避免转换时抛出异常。
内容的提问来源于stack exchange,提问作者grem
相关产品推荐
相关产品推荐

