c# - 如何 XML 序列化由固定文本和属性值组成的字符串?
问题描述
在我之前的问题中,我询问了如何将 XML 序列化为类似的对象:
<PO X=0 Y=0 ... />
我的对象如下所示:
public class Offset
{
public int X { get; set; }
public int Y { get; set; }
如评论和答案中所述,这是无效的 XML,因此尝试将 XML 序列化为该对象是没有意义的。
客户同意另一种格式(有效的 XML):
<PO>X=0 Y=0 ...</PO>
但是如何做到这一点?
我看到了三种方法来完成这项工作:
- 使用 XML 序列化器指令(如
[XmlRoot]
、[XmlElement]
等)[XmlAttribute]
来引导 XML 序列化器。 - 创建一个新属性并将其用于 XML 序列化。
- 两者的结合。
我尝试了第一种方法,但失败了,所以我决定创建一个新属性,这就是我目前拥有的:
[XmlRoot(ElementName = "PO")]
public class Offset
{
[XmlIgnore]
public double X { get; set; }
[XmlIgnore]
public double Y { get; set; }
[XmlIgnore]
public double Z { get; set; }
[XmlIgnore]
public double Phi { get; set; }
[XmlElement(ElementName = "output")]
public string xml_output;
public string generate_xml_output()
{ return $"X={X} Y={Y} Z={Z} PHI={Phi}"; }
public Offset()
{ X = 0; Y = 0; Z = 0; Phi = 0;
xml_output = generate_xml_output(); }
这是我当前的 XML:
<PO>
<output>X=0 Y=0 Z=0 PHI=0</output>
</PO>
这是接近但没有雪茄:-)
有谁知道我如何告诉 XML 序列化程序将该output
属性用作“默认属性”(以省略<output>
标签)?
提前致谢
之后编辑
乍一看,一切似乎都很好,但setter
现在出现了问题。我自己编写了一个解析器,但我的印象是,虽然它看起来不错,但缺少一些东西,并且弄乱了我的 XML 序列化。
这就是我的课程(使用我的实现setter
)的样子:
[XmlText]
public string xml_output
{
get { return $"X={X} Y={Y} Z={Z} PHI={Phi}"; }
set {
string[] temp = xml_output.Split(' ');
try
{ X = Convert.ToDouble(temp[0].Replace("X=","")); }
catch (Exception)
{ X = 0; }
try
{ Y = Convert.ToDouble(temp[1].Replace("Y=", "")); }
catch (Exception)
{ Y = 0; }
try
{ Z = Convert.ToDouble(temp[2].Replace("Z=", "")); }
catch (Exception)
{ Z = 0; }
try
{ Phi = Convert.ToDouble(temp[3].Replace("PHI=", "")); }
catch (Exception)
{ Phi = 0; }
}
}
你知道我setter
缺少什么吗?
解决方案
[XmlText]
public string CompositeOutput {
get { return $"X={X} Y={Y} Z={Z} PHI={Phi}"; }
set { /* your parse logic here *}
}
推荐阅读
- javascript - 不使对象指针相同的正确方法
- xcode - MLModel 如何分析 ImagePicker?
- c - C:使用pthreads的线程同步,锁定和解锁互斥锁
- c# - AWS Lambda Dot Net Core 3.1 在使用 Aspose Cells for .Net 时抛出 gdip 异常
- mysql - 对部分字符串使用 HAVING 截断值错误的 sql 子句
- docker - 无法挂载到 Kubernetes 中的 nfs pod
- php - PHP CURL在HTTPHeader中传递连接变量
- javascript - “按键”事件开启
- postgresql - 使用最新版本的 Postgresql psql 客户端工具时无法连接到 Postgres 服务器
- docker - Docker 上的 Nginx - proxy_pass to Directory 给出 404