Xml 反序列化。是不是可以从 xml 保存字符串格式?
Posted
技术标签:
【中文标题】Xml 反序列化。是不是可以从 xml 保存字符串格式?【英文标题】:Xml deserialization. Is it possible to save string format from xml?Xml 反序列化。是否可以从 xml 保存字符串格式? 【发布时间】:2020-07-04 03:48:14 【问题描述】:我正在使用new XmlSerializer(typeof(R))
从 xml 中获取对象。
但是我遇到了一个问题,xml中的属性值有一些格式,例如:
<dueNote value="Дата перевода валюты = 12.03.2020 18:31:58
Курс доллара к рублю = 71.472
Курс франка к рублю = 76.457
Курс евро к рублю = 81.0207
Тип расчетного расстояния = 2
"/>
是否有可能以某种方式保存 xml 属性的格式?目前在反序列化后,这个字符串变得扁平,没有任何换行符等。
有没有像'XmlAttrubte'
这样的注释来响应格式化?
代码:
[XmlElement("dueNote")]
public StringValueElement DueNote get; set;
public class StringValueElement
[XmlAttribute("value")]
public string Value get; set;
public StringValueElement(object value)
Value = Convert.ToString(value);
public StringValueElement()
【问题讨论】:
由于缺少语言标签,您的问题没有引起太多关注。 【参考方案1】:您可以使用 XML 字符实体来标记属性值内的行尾
<?xml version="1.0"?>
<dueNote value="Дата перевода валюты = 12.03.2020 18:31:58

Курс доллара к рублю = 71.472

Курс франка к рублю = 76.457

Курс евро к рублю = 81.0207

Тип расчетного расстояния = 2

">
</dueNote>
属性值只能是纯文本,不能是结构化文本,特殊字符需要编码为字符实体。
XML 属性值中允许换行,但根据 W3C 的建议,您的 XML 解析器应将所有空白字符标准化为空格 (0x20)。
http://www.w3.org/TR/1998/REC-xml-19980210#AVNormalize
【讨论】:
我收到了来自国外 API 的响应,我不能在属性末尾添加额外的字符。有没有办法使用 XmlReaderSettings 解决这个问题? 遗憾的是没有设置来处理这个问题。 xml 规范声明解析器应该将换行符规范化为空格字符。答案已更新。【参考方案2】:大多数 xml 解析器通过删除不必要的空格来规范化属性的内容。但不是全部。
您可以使用XmlTextReader。它将保留空白。
R root;
var serializer = new XmlSerializer(typeof(R));
using (var reader = new XmlTextReader("test.xml")) // new XmlTextReader(stream);
root = (R)serializer.Deserialize(reader);
Console.WriteLine(root.DueNote.Value);
【讨论】:
以上是关于Xml 反序列化。是不是可以从 xml 保存字符串格式?的主要内容,如果未能解决你的问题,请参考以下文章