Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 简洁的反序列化XML_C#_.net_Serialization_Orm_Dapper - Fatal编程技术网

C# 简洁的反序列化XML

C# 简洁的反序列化XML,c#,.net,serialization,orm,dapper,C#,.net,Serialization,Orm,Dapper,如果将XML存储在nvarchar中,Dapper(或Dapper扩展)是否有方法将XML反序列化为DataContract类型或带有XmlRoot/XmlElement注释的类型 如果它不直接处理它,有这样的习惯用法吗?例如,可能我的目标DataContract类有一个Dapper试图设置的属性,该属性执行字符串的反序列化?否,当前它不会尝试对此执行任何特殊操作,除非将其分配给与列名匹配的字符串属性。现在,我只建议:将“获取数据”和“将数据反序列化为对象”步骤分开。它也许可以被看作是一种附加功

如果将XML存储在nvarchar中,Dapper(或Dapper扩展)是否有方法将XML反序列化为DataContract类型或带有XmlRoot/XmlElement注释的类型


如果它不直接处理它,有这样的习惯用法吗?例如,可能我的目标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" />