gpt4 book ai didi

c# - 没有装饰器的反序列化

转载 作者:行者123 更新时间:2023-11-30 21:33:45 25 4
gpt4 key购买 nike

我有几个成员的简单类,比方说 String namelist<String> friends .创建类的实例后,我想序列化对象并将其反序列化:

        //serialize
myClass mine = new myClass();
mine.name = "Peter";
var xmls = new XmlSerializer(typeof(myClass));

using (System.IO.FileStream file = System.IO.File.Create(path))
{
xmls.Serialize(file, mine);
}

//deserialize
var xmls = new XmlSerializer(typeof(myClass));
using (System.IO.FileStream file = System.IO.File.Open(path, System.IO.FileMode.Open))
{
myClass mine = (myClass) xmls.Deserialize(file);
Console.writeline(mine.name);
}

反序列化过程运行良好,这让我有点吃惊,因为我预计我需要 XML 元素的装饰器。背后的黑客是什么?这是因为我在类里面没有使用其他变量吗?何时应使用 [XmlElement("Name")] 等装饰器将成员标记为反序列化?

谢谢!

最佳答案

我不确定以前的版本,但自 .Net Framework 4.5 以来 XmlSerializer使用此属性 (XmlElementAttribute) 来控制 xml 序列化。反序列化过程不需要它。

By default, an XML element name is determined by the class or member name. In a simple class named Book, a field named ISBN will produce an XML element tag .

来源:Microsoft Docs

通常是 XmlElement attribute当您想为类中的成员(或类本身)提供一个替代名称时使用,该名称以 xml 格式表示该元素。

例如这个类:

public class MyClass
{
public string Name { get; set; }
}

如你所用:

var mine = new MyClass();
mine.Name = "Peter";
...
xmls.Serialize(file, mine);

应该序列化为

<MyClass>    <Name>Peter</Name></MyClass>

Bu you can controle the xml output with the XmlElementAttribute giving another name to the property in xml format. Like this:

public class MyClass
{
[XmlElement("UserName")]
public string Name { get; set; }
}

那么输出应该是这样的:

<MyClass>    <UserName>Peter</UserName></MyClass>

DefaultValueXmlIgnore 等有助于控制 xml 反/序列化的其他属性可能非常有用。您可以在 official docs 中阅读更多相关信息.

希望对你有帮助。

关于c# - 没有装饰器的反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51032080/

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