支持C#中私有字段的公共属性的XML序列化
本文关键字:XML 序列化 属性 字段 支持 | 更新日期: 2023-09-27 18:00:05
我希望有人能帮我回答这个问题,因为我整个上午都在努力寻找这个问题的解决方案。
我有一个类需要序列化为XML。只要我序列化一个简单的公共属性,XML序列化就可以工作。但是,如果我有一个public属性,该属性充当支持它的私有字段的getter,则该公共属性不会序列化(尽管用[XmlAttribute()]
进行了修饰)。我浏览了MSDN和StackOverflow以寻找答案,但都无济于事。我在下面模拟了一个例子。
[Serializable()]
[XmlRoot("foobar")]
public class FooBar
{
[XmlAttribute("foo")]
public string Foo { get; set; }
private bool bar;
[XmlAttribute("bar")]
public string Bar
{
get { return ConvertBoolToYesNo(bar); }
}
public FooBar()
{
Foo = "foo";
bar = true;
}
public string ConvertBoolToYesNo(bool boolToConvert)
{
if(boolToConvert == true)
return "yes";
else
return "no";
}
}
当我期望它返回<?xml version="1.0" encoding="us-ascii"?><foobar foo="foo" bar="yes" />
时,它会返回<?xml version="1.0" encoding="us-ascii"?><foobar foo="foo" />
。如有任何建议,我们将不胜感激。
提前感谢!
点击此处查看答案:
为什么没有setter的属性没有序列化
似乎这是序列化程序的限制(根据设计),当你有"只读"属性时,尝试添加一个"setter",它可能会起作用。
我认为只读属性不能由XMLSerializer序列化。