gpt4 book ai didi

c# - 为什么 XmlSerializer.Order 这样做

转载 作者:太空宇宙 更新时间:2023-11-03 21:54:11 25 4
gpt4 key购买 nike

谁能解释为什么我得到下面的结果?

应该实例化的类:

[System.SerializableAttribute()]
public class SampleClass
{
[System.Xml.Serialization.XmlElementAttribute(Order = 10)]
public string Foo { get; set; }
[System.Xml.Serialization.XmlElementAttribute(Order = 5)]
public string Bar { get; set; }
}

用于反序列化的 XML:

<?xml version="1.0" encoding="utf-8" ?>
<SampleClass>
<Foo>Test1</Foo>
<Bar>Test2</Bar>
</SampleClass>

我在反序列化类中看到 Foo = Test1(正确)和 Bar = null(不正确)。

这都是关于 Order 属性的。它是故意设置为错误的值。如果值为 0 和 1,一切正常。

NameOrder 条件与两个字段都不匹配,但由于某种原因,一个字段被反序列化,而第二个字段没有。我宁愿看到 Exception 或两个 values = null 或两个字段都已解析和反序列化。

有什么解释吗?

最佳答案

您确实看到了序列化错误。

这真的取决于设计偏好。开发人员决定他们不想 except 并中止整个反序列化过程,而是通知并继续。

使用您的 XML。

<?xml version="1.0" encoding="utf-8" ?>
<SampleClass>
<Foo>Test1</Foo>
<Bar>Test2</Bar>
</SampleClass>

考虑将此代码反序列化。

XmlSerializer xs = new XmlSerializer(typeof(SampleClass));

XmlDeserializationEvents events = new XmlDeserializationEvents();
events.OnUnknownAttribute = (sender, e) => Debug.WriteLine("Unknown Attributed");
events.OnUnknownElement = (sender, e) => Debug.WriteLine("Unknwon Element");
events.OnUnknownNode = (sender, e) => Debug.WriteLine("Unknown Node");
events.OnUnreferencedObject = (sender, e) => Debug.WriteLine("Unreferenced Object");

SampleClass cs_de = (SampleClass)xs.Deserialize(XmlReader.Create(new StringReader(xml)), events);

Debug.WriteLine(cs_de.Foo);
Debug.WriteLine(cs_de.Bar);

当我使用正确的顺序时。

[System.Xml.Serialization.XmlElementAttribute(Order = 0)]
public string Foo { get; set; }
[System.Xml.Serialization.XmlElementAttribute(Order = 1)]
public string Bar { get; set; }

我的输出是

Foo
Bar

当我使用不正确的顺序时。

[System.Xml.Serialization.XmlElementAttribute(Order = 10)]
public string Foo { get; set; }
[System.Xml.Serialization.XmlElementAttribute(Order = 5)]
public string Bar { get; set; }

我的输出是

Unknown Node
Unknwon Element
Foo

那么为什么打印出Foo呢?嗯,我的理解是 OrderNOT 索引。 Order只指定Foo需要出现在Bar之前,而不是Foo需要是第10个元素Bar 必须是第 5 个。我认为这使反序列化器更加灵活。

关于c# - 为什么 XmlSerializer.Order 这样做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13055352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com