将元素值反序列化为字符串,尽管它包含混合内容

2023-11-22

假设这样的 XML:

<my:Root xmlns:my="http://foo/bar">
    <my:FieldBasic>content</my:FieldBasic>
    <my:FieldComplex>
        <html xml:space="preserve" xmlns="http://www.w3.org/1999/xhtml">
            <div><h1>content</h1></div>
        </html>
    </my:FieldComplex>
<my:Root>

和一个像这样的类:

[Serializable]
[XmlType(AnonymousType = true, Namespace = "http://foo/bar")]
[XmlRoot(ElementName = "Root", Namespace = "http://foo/bar", IsNullable = false)]
public class MyRoot
{
    public string FieldBasic { get; set; }
    public string FieldComplex { get; set; }
}

我如何反序列化<my:FieldComplex>到其中的一个字符串FieldComplex?当它找到里面的 HTML 时,它就会失败。我想让它给我一个包含以下内容的字符串:

<html xml:space="preserve" xmlns="http://www.w3.org/1999/xhtml">
    <div><h1>content</h1></div>
</html>

如果我声明FieldComplex as public object FieldComplex (i.e. xsd:anyType)它有点起作用,我得到了XMLNode[]里面我可以使用。

但我需要FieldComplex序列化时的字符串类型,对于序列化,XML 将不包含 HTML,它将类似于:

<my:Root xmlns:my="http://foo/bar">
    <my:FieldBasic>content</my:FieldBasic>
    <my:FieldComplex>content</my:FieldComplex>
<my:Root>

声明FieldComplexas 对象会将这些属性插入到<my:FieldComplex>元素:

 xmlns:q1="http://www.w3.org/2001/XMLSchema" p3:type="q1:string" xmlns:p3="http://www.w3.org/2001/XMLSchema-instance

我不想要这样。我也不想使用不同的类进行序列化和反序列化。

那么,有可能吗?

使长话短说,是否可以有这个类:

public class MyRoot
{
    public string FieldBasic { get; set; }
    public string FielComplex { get; set; }
}

序列化到这个:

<my:Root xmlns:my="http://foo/bar">
    <my:FieldBasic>content</my:FieldBasic>
    <my:FieldComplex>content</my:FieldComplex>
<my:Root>

并从中反序列化:

<my:Root xmlns:my="http://foo/bar">
    <my:FieldBasic>content</my:FieldBasic>
    <my:FieldComplex>
        <html xml:space="preserve" xmlns="http://www.w3.org/1999/xhtml">
            <div><h1>content</h1></div>
        </html>
    </my:FieldComplex>
<my:Root>

?

P.S.只是为了解释“为什么?”。我有一个类女巫被连载。然后,序列化的 XML 穿过应用程序中的多个节点,最终返回,但会像上面那样进行更改。这些层会执行一些 XML 验证,如果输入上有额外的属性或元素,则验证失败并停止流程。我想将返回的 XML 映射到同一个类。从它的角度来看,内容只是字符串,但序列化/反序列化当然不一样:(


这还没有完全完成,因为我不记得是否可以/如何将命名空间前缀添加到 Xml 序列化中的根元素。但是,如果您在 MyRoot 类中实现 IXmlSerialized 接口,如下所示:

[XmlRoot("Root", Namespace="http://foo/bar")]
public class MyRoot : IXmlSerializable

然后自己编写 XML 序列化方法,如下所示:

        void IXmlSerializable.ReadXml(System.Xml.XmlReader reader)
        {
            reader.MoveToContent();
            var outerXml = reader.ReadOuterXml();
            XElement root = XElement.Parse(outerXml);

            this.FieldBasic = root.Elements(XName.Get("FieldBasic", "http://foo/bar")).First().Value;
            this.FieldComplex = root.Elements(XName.Get("FieldComplex", "http://foo/bar")).First().Elements().First().Value.Trim();
        }



        void IXmlSerializable.WriteXml(System.Xml.XmlWriter writer)
        {
            writer.WriteRaw(String.Format("\r\n\t<my:FieldBasic>\r\n\t\t{0}\r\n\t</my:FieldBasic>", this.FieldBasic));
            writer.WriteRaw(String.Format("\r\n\t<my:FieldComplex>\r\n\t\t{0}\r\n\t</my:FieldComplex>\r\n", this.FieldComplex));
        }

(从 GetSchema 方法返回 null)

这至少应该让你非常接近你所追求的目标。

您可能还会发现这些链接很有帮助。

IXml可序列化

命名空间

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将元素值反序列化为字符串,尽管它包含混合内容 的相关文章

  • 调整添加的绘制组件的大小和奇怪的摆动行为

    这个问题困扰了我好几天 我正在制作一个特殊的绘画程序 我制作了一个 JPanel 并添加了使用 Paint 方法绘制的自定义 jComponent 问题是 每当我调整窗口大小时 所有添加的组件都会 消失 或者只是不绘制 因此我最终会得到一个
  • Antlr 解析器运算符优先级

    考虑以下语法 我对运算符优先级有疑问 例如 res 2 a b有一个类似的解析树res 2 a b 我知道问题出在哪里 但我没有想到没有相互左递归的 漂亮 解决方案 你能帮我一点忙吗 该语法与自定义访问者一起使用 grammar Math
  • 仅当显式选择行时才关闭 ui-bootstrap typeahead

    我创建了这个jsBin http jsbin com livuqafe 2 edit来证明我遇到的问题 如果您转到此处 请尝试输入 五 并继续 你的自然反应是输入 五 然后按 Tab 如果你想要 五百 你可以向下箭头一次 但是 在这种情况下
  • 如何通过索引访问 JSON 对象中的字段

    我知道这不是最好的方法 但我别无选择 我必须通过索引访问 JSONObject 中的项目 访问对象的标准方法是只写this objectName or this objectName 我还找到了一种获取 json 对象内所有字段的方法 fo
  • 测量窗口偏移

    有没有一种方法可以测量 jQuery 中窗口的偏移量 以便我可以比较 固定 元素和相对定位元素的位置 我需要能够知道窗口滚动了多远 以便我可以使用该图来计算固定元素的高度 相对于视口顶部 和相对对象的高度 相对于顶部 之间的差异文件的内容
  • MySQL 查询计算上个月

    我想计算上个月的订单总额 我收到了从当前日期获取当月数据的查询 SELECT SUM goods total AS Total Amount FROM orders WHERE order placed date gt date sub c
  • 没有输入的 jQuery 日期选择器

    我有一个相当复杂的网络应用程序 我想向其中添加一些日期选择 UI 我遇到的问题是我无法从文档中弄清楚如何真正控制日期选择器的出现方式和时间 不涉及任何表单元素 不 我不会添加秘密表单字段 因此简单的开箱即用方法根本行不通 我希望有人可以提供
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • php 数组中出现意外的 json 输出结构

    我正在尝试转换动态数据 如何从 PHP 获取此 JSON JSON 122240cb 253c 4046 adcd ae81266709a6 item 0 3 这就是我所做的 但它不起作用 PHP json array 122240cb 2
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template
  • NSArrayController 无需将大型数据集加载到数组中

    我想使用 NSArrayController 向 NSTableView 提供数据 我面临的问题是我不想将所有数据预先加载到数组中 然后使用数组控制器setContent 方法 我的数据模型是一个管理数百万条记录的大型现有代码库 它包含有效
  • 一种无需 JavaScript 即可在 PHP 中确定浏览器宽度的方法?

    首先有吗 或者我必须使用javascript 我希望能够更改使用的 CSS 因此 frex 我可以为移动设备或其他设备加载较小的字体 不幸的是 仅使用 PHP 无法检测用户分辨率 如果您使用 Javascript 则可以在 cookie 中
  • 如何在 Angular 4 中翻译 mat-paginator?

    你知道如何在 Angular 中翻译 每页项目 吗mat paginator标签 这mat paginator是材料设计中的一个元素 您可以使用MatPaginatorIntl为了这 威尔 豪厄尔制作 https github com an
  • 使用velocity.js制作可拖动元素的动画

    我正在使用velocity js 为用户拖动的可拖动 SVG 元素设置动画 然而 velocity js 将先前的 mousemove 坐标排队并通过所有后续的 mousemove 坐标进行动画处理 我想要的是velocity js 不要对
  • 如何修复:“无法解析类型 java.lang.CharSequence。它是从所需的 .class 文件间接引用的”消息? [复制]

    这个问题在这里已经有答案了 我正在尝试使用这个字符串 amountStr amountStr replace replace replace 但我收到一条错误消息 我知道我收到的错误消息是因为我刚刚发布的字符串已过时 所以我想知道该字符串的
  • 如何在 OSX 上安装 LaTeX .sty 文件?

    我设置了一个 LaTeX 项目 tex documents some file tex support todonotes sty where some file tex uses todonotes usepackage colorinl
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前
  • Android 材料芯片组件崩溃应用程序。无法膨胀 xml

    Tried Chip来自两个支持库的组件 com google android support design 28 0 0 rc01和材料 com google android material material 1 0 0 rc01 堆栈
  • 禁用允许文本选择的

    残疾人可以吗

随机推荐

  • 如何使用 JavaScript 在新选项卡中打开链接

    我正在开发一个网站 我必须从后端打开一个网址 我现在用的是c 我的问题是我想在新选项卡而不是新窗口中打开链接 我的代码在这里 string url ppHref ToString string newScript ClientScript
  • 如何在流星上创建自动增量字段?

    我需要一个自动增量字段 但不是用于主 ID 它只是为了向客户支持应用程序的用户提供一个易于记住的案例编号 我发现这篇文章解释了如何在 mongodb 上创建自动增量字段http docs mongodb org manual tutoria
  • void** 是 ANSI-C 中可接受的类型吗?

    我见过一个函数 其原型是 int myfunc void ppt 该函数在 C 文件中调用为 a myfunc mystruct var1 其中 mystruct 是我们拥有的结构之一的 typedef 这在MSVC6 0中没有任何编译错误
  • 如何将选定的列从具有不同列的 df 附加到 pandas 数据框

    我希望能够将 df1 df2 df3 附加到一个 df All 中 但由于每个数据帧都有不同的列 我怎样才能在 for 循环中做到这一点 我还有其他必须在 for 循环中做的事情 import pandas as pd import num
  • 对部分排序列表进行排序的最佳方法是什么?

    可能最好用一个小例子来说明 鉴于关系 A lt B lt C A lt P lt Q 正确的输出是 ABCPQ or APQBC or APBCQ etc 换句话说 只要给定的关系成立 任何顺序都是有效的 我对最容易实现的解决方案最感兴趣
  • 获取 Angular 2 .ts 文件而不是 .d.ts 文件

    当我使用 angular2 代码时 我经常需要看到执行一个类 比方说Router class 如果我点击Router输入我的 IDE WebStorm e G 在另一个类的构造函数中 export class myClass constru
  • 如何在没有 Transfer Encoding: chunked 的情况下发送 HTTP 响应?

    我有一个响应 Twilio API 的 Java Servlet Twilio 似乎不支持我的回复所使用的分块传输 我怎样才能避免使用Transfer Encoding chunked 这是我的代码 response is HttpServ
  • Web 服务无法序列化接口

    我有一个像这样的界面 public interface IDocument ISerializable Boolean HasBeenUploaded get set void ISerializable GetObjectData Ser
  • RXTX 在 Windows 7 64 位下无法列出或找到端口

    早上好 我在 Windows 7 64 位上使用 或安装 rxtx 时遇到问题 我之前在 x86 win XP 系统上使用过它 没有出现任何问题 由于由于某种原因重新安装到这个新系统 rxtx 无法找到任何端口 我尝试过 rxtx 安装 C
  • C中整数的大小[重复]

    这个问题在这里已经有答案了 可能的重复 int 的大小是否取决于编译器和 或处理器 整数的大小是否取决于编译器 操作系统或处理器 如果我在 32 位操作系统或 64 位操作系统上使用 gcc 并在 32 位计算机或 64 位计算机上运行 在
  • 如何让 Emacs 启动更快?

    I use Emacsv 22 控制台版本 可以远程使用PuTTY或本地与Konsole 作为我在 Linux 上的主要文本编辑器 每次启动时都需要一段时间来加载 可能几乎一秒钟 尽管我从未计时 我经常打开和关闭 Emacs 因为我更喜欢使
  • 在 R 中的同一数据框中绑定具有相似列名的列

    我有一个看起来有点像这样的数据框 df lt data frame 0 2 1 3 2 4 5 7 6 8 2 4 0 2 1 3 2 4 colnames df lt rep c a b c 3 gt df a b c a b c a b
  • 从 Zip 文件中删除文件夹

    我正在尝试从 Zip 文件中删除文件夹 所以我的文件结构是这样的 首先内部 我尝试使用这里的代码从 Zip 中删除文件作者 Siddharth Rout 但它只移动文件 显然文件夹变空了 但并未从 Zip 中删除 Code Sub del
  • 以编程方式添加的捆绑产品未显示在前端

    我正在尝试从 PHP 脚本将捆绑产品插入 Magento 数据库 有问题的版本是社区 1 5 1 0 我尝试了问题中描述的方法 使用简单商品的 SKU ID 以编程方式在 Magento 中添加捆绑产品 插入的产品在管理部分中显示得很好 我
  • 是否应该在 Web 应用程序中禁用实体框架延迟加载?

    我听说您应该在 Web 应用程序中禁用 EF 的延迟加载功能 ASP NET Here and here 对于初学者 现在我在这里真的很困惑 因为我一直认为应该始终启用延迟加载 因为它可以防止从数据库获取不必要的数据 所以 现在我的问题是
  • 在 iOS Core Data 中存储高精度纬度/经度数字

    我正在尝试将纬度 经度存储在核心数据中 这些最终精度为 6 到 20 位 无论出于何种原因 我将它们作为核心数据中的浮点数 将它们四舍五入而不给我返回确切的值 我尝试了 十进制 类型 但也没有运气 NSStrings 是我唯一的选择吗 ED
  • grunt-contrib-jasmine 和 PhantomJS 安全性

    我收到错误 XMLHttpRequest 无法加载https my api domain com Access Control Allow Origin 不允许 Origin file 当我尝试运行一些通过 grunt contrib ja
  • 使用关联数组的 D3 日历视图

    我想创建一个日历视图 如下例所示 http bl ocks org 4063318 其实我正在尝试修改它 我有一个像这样的关联数组 AdminCourt 2012 10 02 2 2012 10 09 2 2012 10 16 1 Cons
  • Java 无法使用正则表达式 \s,显示:无效的转义序列

    我想用 替换字符串中的所有空白字符 用 ss 替换所有 它对于 效果很好 但不知何故 eclipse 不允许我使用 s 作为空白 我尝试了 t 但它也不起作用 我收到以下错误 无效的转义序列 有效的转义序列 是 b t n f r 这是我的
  • 将元素值反序列化为字符串,尽管它包含混合内容

    假设这样的 XML