c# - 使用 .Net XmlSerializer,有没有办法省略根级标记?

标签 c# .net root xmlserializer

我需要根据网络服务类型规范序列化一些 Xml。由于某些原因,我创建了几个不同的类来封装我的应用程序的信息。这些类不直接匹配 xml 架构。见下文。

<TopLevel>
    <InfoString>Value</InfoString>
    <InfoInt>242</InfoInt>
    <Etcetera>Value2</Etcetera>
</TopLevel

虽然我的类(class)是这样的:

public class Info
    -InfoString
    -InfoInt
public class Etcetera
    -EtceteraValue

这会产生不正确的 Xml,因为有一个元素 Info 包含 InfoString,而 Etcetera 元素包含 EtceteraValue。

我实现了 IXmlSerializable,但 XmlSerializable 仍然写入我的类的根级别。有什么想法吗?

为清楚起见:我正在尝试将多个类序列化到同一文档中的同一级别。

最佳答案

我认为这是不可能的,因为如果不止一个类具有同名属性,序列化程序可以生成无法明确反序列化的 xml。

要么您完全自己进行序列化,要么使用 XSLT 将输出转换为您需要的 xml 格式。

我过去所做的是创建传输类,它具有正确的结构,可以准确地序列化为我想要的格式。您只需将原始对象中的值填充到传输对象中即可。

编辑另一个想法:

您可以使用 LINQ 表达式从对象中查询所需格式的所有数据。之后,您可以使用 LINQ to XML 将结果序列化为 xml。我以前从未这样做过,如果你有幸做到这一点,请告诉我。

关于c# - 使用 .Net XmlSerializer,有没有办法省略根级标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5664923/

相关文章:

php - 文档根 PHP

c# - 子字符串替换的问题

c# - ValidationExpression Number正负Decimal

asp.net - 解决 Azure 应用服务中的 .NET TypeLoadException

.net - 在 Azure DevOps 中获取 UseDotNet@2 以使用 vmImage 的 dotnet SDK(或来自缓存的 SDK)

shell - sh- 3.2# 而不是#?

c# - 如何检查类型之间是否存在隐式转换?

c# - 找到具有给定除数的最接近的较大数字

java - 所有重复的单词

php - 创建一个任何人都可以执行的 shell.sh,它在内部以 root 身份运行