将枚举类型数据读取/写入XML文件

3

我正在使用XmlWriter编写一个枚举值,在xml中它看起来像这样:

<Tile>Plain</Tile>

writer.WriteValue(tile.ID.ToString()); // ID's type is the enum

Plain是枚举值之一。现在当我尝试读取它时,它不起作用。

(TileID)reader.ReadElementContentAs(typeof(TileID), null);

当我的reader.Name == "Tile"时,我会这样做,这应该有效,但显然无法将字符串转换为我的枚举。是否有任何方法可以修复写入,以便我不必执行.ToString()(因为如果我不执行,就会出现错误:“TileID不能强制转换为字符串”)。或者修复阅读?

谢谢。


为什么你不想使用 ToString() 函数? - Sam I am says Reinstate Monica
我不想这样做,但如果有另一个类似WriteValue的函数,它不需要这个,并且可以正确地写入我的枚举值,那将是很棒的。 - The Oddler
2个回答

4
我建议使用 Enum.TryParse
var enumStr = reader.ReadString();
TitleID id;
if (!Enum.TryParse<TitleID>(enumStr, out id)
{
    // whatever you need to do when the XML isn't in the expected format
    //  such as throwing an exception or setting the ID to a default value
}

谢谢!这是一件很简单的事情,每天都在学习新东西:D - The Oddler
@TheOddler FYI - 如果您要在解析失败时将ID枚举设置为默认值,请不要在变量初始化时设置它,而是在TryParse调用告诉您解析失败后再设置它,因为TryParse函数会将值设置为某个默认值。 - JG in SD

3

您可能需要使用 Enum.Parse 方法。我最近为公司的一个项目写了以下代码:

public static T ParseTo<T>(string value) {
    return (T)Enum.Parse(typeof(T), value);
}

它只是让转换过程更加清晰。由于我们进行了非常严格的XML生成测试,因此我不需要进行任何错误检查...您可能想要添加一些。

对您的使用:

var idString = reader.ReadString();
TileID tileId = StaticClassYouPutItIn.ParseTo<TileID>(idString);

谢谢,非常好的答案 :D 虽然对于我那些奇怪的 XML 来说,TryParse 可能是个更好的主意。谢谢! - The Oddler
@TheOddler 所以我说你可能想要添加一些错误检查 :) 很高兴能帮到你。 - Simon Whitehead

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接