C# 如何处理来自SQL Server的XML中的空对象?
我有一个以XML形式返回对象的存储过程。我如何处理对象不存在的情况 我不能返回null或空字符串,因为XmlReader抱怨它不是有效的XMLC# 如何处理来自SQL Server的XML中的空对象?,c#,sql-server,xml,C#,Sql Server,Xml,我有一个以XML形式返回对象的存储过程。我如何处理对象不存在的情况 我不能返回null或空字符串,因为XmlReader抱怨它不是有效的XML 如果我返回一个空标记,我如何判断它只是一个空对象还是没有对象?嗯,一种常见的方法是一些标记属性,例如xsi:nil=“true”(尽管这只是一个示例)。要么返回一个自定义的空标记()并检查它,要么只是更改读取数据的方式: 首先将流提取到字符串变量中,并检查string.IsNullOrEmpty 只需尝试捕获ArgumentNullException/
如果我返回一个空标记,我如何判断它只是一个空对象还是没有对象?嗯,一种常见的方法是一些标记属性,例如
xsi:nil=“true”
(尽管这只是一个示例)。要么返回一个自定义的空标记()并检查它,要么只是更改读取数据的方式:
- 首先将流提取到字符串变量中,并检查string.IsNullOrEmpty
- 只需尝试捕获ArgumentNullException/ArgumentException的读取器
CREATE PROCEDURE sp_GetObjectAsXml
(
@intId int,
@intExists int out
)
AS
BEGIN
SELECT 'hello world' WHERE 1 = @intId
SET @intExists = @@ROWCOUNT
END
-- Happy Path
DECLARE @intExists int
exec sp_GetObjectAsXml 1, @intExists out
SELECT @intExists -- results in 1
-- Sad Path
DECLARE @intExists int
exec sp_GetObjectAsXml 10, @intExists out
SELECT @intExists -- results in 0
根据您的“外部约束”(例如,您控制了多少XML生成/使用过程),可以通过根本不包含元素来表示null
接收方(方案验证等)当然必须准备好处理可选元素。我看到的两种方法是:
第一个选项通常更容易处理,但会产生更多的文本。第二个可以生成更小的xml文件。这假设我们返回一个对象-我们可以有多个子对象:一些为null,一些为not.Fair point。在这种情况下,我喜欢使用属性的方法。