支持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" />。如有任何建议,我们将不胜感激。

提前感谢!

支持C#中私有字段的公共属性的XML序列化

点击此处查看答案:

为什么没有setter的属性没有序列化

似乎这是序列化程序的限制(根据设计),当你有"只读"属性时,尝试添加一个"setter",它可能会起作用。

我认为只读属性不能由XMLSerializer序列化。