C# 简洁的反序列化XML
如果将XML存储在nvarchar中,Dapper(或Dapper扩展)是否有方法将XML反序列化为DataContract类型或带有XmlRoot/XmlElement注释的类型C# 简洁的反序列化XML,c#,.net,serialization,orm,dapper,C#,.net,Serialization,Orm,Dapper,如果将XML存储在nvarchar中,Dapper(或Dapper扩展)是否有方法将XML反序列化为DataContract类型或带有XmlRoot/XmlElement注释的类型 如果它不直接处理它,有这样的习惯用法吗?例如,可能我的目标DataContract类有一个Dapper试图设置的属性,该属性执行字符串的反序列化?否,当前它不会尝试对此执行任何特殊操作,除非将其分配给与列名匹配的字符串属性。现在,我只建议:将“获取数据”和“将数据反序列化为对象”步骤分开。它也许可以被看作是一种附加功
如果它不直接处理它,有这样的习惯用法吗?例如,可能我的目标DataContract类有一个Dapper试图设置的属性,该属性执行字符串的反序列化?否,当前它不会尝试对此执行任何特殊操作,除非将其分配给与列名匹配的字符串属性。现在,我只建议:将“获取数据”和“将数据反序列化为对象”步骤分开。它也许可以被看作是一种附加功能,但它目前并不存在。我认为Dapper从v1.50.5(或更早的版本)起已经拥有
XML
数据类型,它可以将XML
数据类型转换为XmlDocument
,XDocument
或XElement
它确实在我的代码中将XML
数据类型转换为XElement
2021年3月5日的样本代码
返回XML类型数据的存储过程:
CREATE PROCEDURE spGetCarInformation
AS
DECLARE @Cfg XML
SET @Cfg = '<Configuration>
<A>111</A>
<B>222</B>
</Configuration>'
SELECT 1 AS Id, 'Test' AS Name, @Cfg AS [Configuration]
创建过程spGetCarInformation
作为
声明@Cfg XML
SET@Cfg=
在项目中添加的Nuget包:
<PackageReference Include="Dapper" Version="2.0.78" />
<PackageReference Include="Microsoft.Data.SqlClient" Version="2.1.2" />
我在.NET 5上测试了代码,但在.NET Framework 4.7.2+和System.Data.SqlClient上也应该可以使用。Dapper是否支持xml
数据类型?请查看您的答案,目前答案是“否”。Marc Gravell,今天的情况如何(2021年3月2日)?当我有一个字符串属性和一个具有相应名称的XElement属性时,我都会得到一个null。我建议团队将SP更改为以字符串形式返回XML。这是最好的解决方案吗?Ricky,你能提供一个简单/小的工作代码示例吗?在我的代码中,Dapper为XML类型的字段返回null,而预期的正确结果将是XElement的实例。@DimitreNovatchev我添加了代码示例。谢谢你,Ricky+1.相反的代码示例如何:将一个Car实例写入数据库中的一个表中,该表有一个XML类型的Car列?@DimitreNovatchev代码示例已更新。
<PackageReference Include="Dapper" Version="2.0.78" />
<PackageReference Include="Microsoft.Data.SqlClient" Version="2.1.2" />