gpt4 book ai didi

C# 使用其中的对象列表序列化一个对象

转载 作者:数据小太阳 更新时间:2023-10-29 01:53:17 26 4
gpt4 key购买 nike

在 C# 中,如果我序列化一个包含对象列表的对象,它是否也会序列化该列表?

例子

public class Move {
public string MoveName {get; set;}

public List<Tag> oTags = new List<Tag>;
}

public class Tag {
public string TagName {get; set;}
}

如果我对 move 进行序列化,存储在 move 中的所有标签也会被序列化吗?另外,如果它不会序列化列表,我将如何让它做到这一点?

<Move>
<MoveName>name</MoveName>
<Tag>Value</Tag>
...
</Move>

最佳答案

是的,使用 XmlSerializer 它将序列化一个 List<T>只要T (或者在你的情况下 Tag )是可序列化的。

Move move = new Move { MoveName = "MyName" };
move.oTags.Add(new Tag { TagName = "Value1" } );
move.oTags.Add(new Tag { TagName = "Value2" } );
move.oTags.Add(new Tag { TagName = "Value3" } );

StringBuilder output = new StringBuilder();
var writer = new StringWriter(output);

XmlSerializer serializer = new XmlSerializer(typeof(Move));
serializer.Serialize(writer, move);

Console.WriteLine(output.ToString());

使用您当前的类结构输出为:

<?xml version="1.0" encoding="utf-16"?>
<Move xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<oTags>
<Tag>
<TagName>Value1</TagName>
</Tag>
<Tag>
<TagName>Value2</TagName>
</Tag>
<Tag>
<TagName>Value3</TagName>
</Tag>
</oTags>
<MoveName>MyName</MoveName>
</Move>

我会看看能否找到一种方法来匹配您当前的 XML 模式,但您可以查看如何应用 XmlAttributes并自己尝试一下。


编辑:

如果您更改类声明以使用以下 XmlAttributes,您将获得与示例中完全相同的 XML 架构:

public class Move 
{
[XmlElement(Order = 1)]
public string MoveName {get; set;}

[XmlElement(Order = 2, ElementName = "Tags")]
public List<Tag> oTags = new List<Tag>();
}

public class Tag
{
[XmlText]
public string TagName {get; set;}
}

序列化后会产生:

<?xml version="1.0" encoding="utf-16"?>
<Move xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MoveName>MyName</MoveName>
<Tags>Value1</Tags>
<Tags>Value2</Tags>
<Tags>Value3</Tags>
</Move>

关于C# 使用其中的对象列表序列化一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19992569/

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