如何在 C# 中将 XMLSerialize 用于枚举类型的属性?
Posted
技术标签:
【中文标题】如何在 C# 中将 XMLSerialize 用于枚举类型的属性?【英文标题】:How do you use XMLSerialize for Enum typed properties in c#? 【发布时间】:2011-01-19 08:42:13 【问题描述】:我有一个简单的枚举:
enum simple
one,
two,
three
;
我还有一个具有simple
类型属性的类。我尝试用属性来装饰它:[XmlAttribute(DataType = "int")]
。但是,当我尝试使用 XmlWriter
对其进行序列化时,它会失败。
这样做的正确方法是什么?我是否必须标记枚举本身以及属性,如果需要,使用哪种数据类型?
【问题讨论】:
【参考方案1】:根据 Darin Dimitrov 的回答 - 我要指出的唯一一点是,如果您想控制枚举字段的序列化方式,那么您可以使用 XmlEnum 属性装饰每个字段。
public enum Simple
[XmlEnum(Name="First")]
one,
[XmlEnum(Name="Second")]
two,
[XmlEnum(Name="Third")]
three,
【讨论】:
请不要忘记使用 [Serializable] 属性标记枚举。 @Anton,如果该类已经被标记为可序列化怎么办?我们还需要将 ENUM 单独标记为可序列化吗? 我按照您的方法以及上面的代码进行了操作;但我仍然在 VB.net 代码中遇到以下错误。Enum underlying type and the object must be same type or object. Type passed in was 'System.String'; the enum underlying type was 'System.Int32'.
课堂上没什么特别的......只是一个具有一个属性和一个枚举的测试类。【参考方案2】:
序列化枚举属性应该没有任何问题:
public enum Simple one, two, three
public class Foo
public Simple Simple get; set;
class Program
static void Main(string[] args)
using (var writer = XmlWriter.Create(Console.OpenStandardOutput()))
var foo = new Foo
Simple = Simple.three
;
var serializer = new XmlSerializer(foo.GetType());
serializer.Serialize(writer, foo);
产生:
<?xml version="1.0" encoding="utf-8"?>
<Foo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Simple>three</Simple>
</Foo>
【讨论】:
这可行,但它使枚举属性成为元素而不是属性。当我尝试使其成为属性时,它失败了。有什么建议吗? 尝试用 XmlAttribute 装饰属性:[XmlAttribute("simple")]public Simple Simple get; set;
物业似乎无法装饰。仅限字段,对吗?
我可能有一个相关的问题 - 我使用了 generate-classes-from-schema tool(不是 xsd
),它可能过度(低于?)归因于属性,因为在我的情况下,枚举属性不是被包含在序列化中。他们以上是关于如何在 C# 中将 XMLSerialize 用于枚举类型的属性?的主要内容,如果未能解决你的问题,请参考以下文章
找不到使用 C# 在 openGL 中将纹理应用于 3d 对象的方法
如何在 C# 中将 HtmlEncode/HtmlDecode 转换为纯文本?