c# - 什么是适合 Web 服务的 XML 类型?

标签 c# xml wcf xmldocument xelement

当前实现

Sql Server 2005 数据库,包含一个名为 messages 的表,以及一个名为 MessageXml、类型为 xml 的列。

带有 Linq to Sql 类的 C# 库项目,该项目生成一个名为 Message 的类,其中包含一个名为 MessageXml、类型为 XElement 的字段。

WCF Web 服务公开 MessagePayload 类,该类具有名为 XElement 类型的 MessageXml 属性。

Web 服务不提供由 Linq to Sql 创建的我的 Message 类。我使用一个轻质物体作为中间物。

问题

XElement 确实是我想要在 WCF 服务中使用的类型还是有更好的类型。要传递到服务中的 xml 应该是完整的文档。另外,我在将 xml 文档作为 XElement 加载时遇到了一些问题。我认为我应该在服务的轻量级类中公开完整的 xml 文档类型,但我对 XDocument 和 XmlDocument 之间的差异有点困惑。

最重要的是,我无法公开具有 XDocument 类型属性的 WCF Message 类,因为它包含无法序列化的 XDeclaration 类型属性。

如果我使用 XmlDocument,那么我必须在 Linq 类和轻量级类之间进行这种奇怪的 xml 类型转换。

 XmlDocument doc = new XmlDocument();
 doc.LoadXml(message.MessageXml.ToString());

 MessageEnvelope retVal = new MessageEnvelope()
 {
      MessageXml = doc,
 };

XmlDocument 似乎是正确的,我知道我必须进行一些翻译,但希望尽可能接近合适的翻译。

最佳答案

您可以使用 XElement 或 XmlElement:

public XmlElement GetXmlElement()
{
    var doc = new XmlDocument();
    doc.Load(PREFIX + @"Enumerations.wsdl");

    return doc.DocumentElement;
}

public XElement GetXElement()
{
    var doc = XDocument.Load(PREFIX + @"Enumerations.wsdl");
    return doc.Root;
}

您既不需要 XDocument 也不需要 XmlDocument。请记住,您返回的任何内容都将位于包含 SOAP 信封的 XML 文档的中间。您不能在文档中包含文档,因此您需要的是一个元素。

关于c# - 什么是适合 Web 服务的 XML 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1013219/

相关文章:

c# - 来自Httpresponse的字符串未传递完整值

c# - 删除条款中的NOT-Linq-To-SQL

java - 使用整数数组 Android 获取布局

java - JAXB:XML 注册表中没有与 namespace 和名称匹配的 XML 元素声明

wcf - 如何影响 Message.GetBody<T>() 的反序列化行为

c# - WCF 服务方法在 WCF 测试客户端中不可用,因为它使用类型

c# - 使用 BotAuth 时如何正确注销

c# - Docusign ID Check 功能无法通过 API 运行

c# - 存储过程和 XML

c# - 从本地主机以外的机器访问 WCF 服务