【问题标题】:How to serialize object's property to XML element's attribute?如何将对象的属性序列化为 XML 元素的属性?
【发布时间】:2013-11-15 17:18:22
【问题描述】:

我创建了一个可序列化的对象,我想将其序列化为 XML,然后再反序列化回来。我想要的是将此对象的一个​​属性保存为 XML 属性。这就是我的意思:

[Serializable]
public class ProgramInfo
{
    public string Name { get; set; }
    public Version Version { get; set; }
}

public class Version
{
    public int Major { get; set; }
    public int Minor { get; set; }
    public int Build { get; set; }
}

我想将 ProgramInfo 保存为如下所示的 XML 文件:

<?xml version="1.0" encoding="utf-8" ?>
<ProgramInfo Name="MyApp" Version="1.00.0000">

</ProgramInfo>

请注意 XML 中的 Version 属性及其对应的属性。我已经有了解析器,可以将字符串“1.00.0000”转换为有效的版本对象,反之亦然,但我不知道如何将它用于这种 XML 序列化场景。

【问题讨论】:

标签: c# xml serialization


【解决方案1】:

你需要的是一个被序列化的字符串表示的属性:

[Serializable]
public class ProgramInfo
{
    [XmlAttribute]
    public string Name { get; set; }

    [XmlIgnore]
    public Version Version { get; set; }

    [XmlAttribute("Version")
    public string VersionString 
    { 
      get { return this.Version.ToString(); } 
      set{ this.Version = Parse(value);}
    }
}

【讨论】:

    【解决方案2】:

    你可以做的是拥有一个 VersionValue 和一个 VersionType 属性

    [Serializable]
    public class ProgramInfo
    {
      private string _versionValue;
      public string Name { get; set; }
      public string VersionValue 
      { 
        get
        {
          return _versionValue;
        }
        set{
           _versionValue = value;
           //Private method to parse
           VersonType = parseAndReturnVersionType(value);
    
           } 
      }
      public Version VersionType { get; set; }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-04
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      相关资源
      最近更新 更多