代码之家  ›  专栏  ›  技术社区  ›  JL. Hans Passant

C,XML到类的反序列化问题

  •  0
  • JL. Hans Passant  · 技术社区  · 15 年前

    我有以下XML代码段:

    <dmFiles>
    −
    <dmFile dmUpFileGuid="" dmFileDescr="testcase01.pdf" dmFileMetaType="main" dmFileGuid="" dmMimeType="pdf" dmFormat="">
    

    如果我为dmfile属性(如dmfiledescr)创建一个具有字符串属性的强类型C类,如何确保这些属性将序列化为我的C类中的属性?

    3 回复  |  直到 15 年前
        1
  •  1
  •   jdehaan    15 年前

    通过对类成员使用XML属性。使用 [XmlAttribute("name")] . 您的实现如下所示:

    [XmlRoot("dmFile")]
    public class DmFile
    {
       [XmlAttribute("dmUpFileGuid")]
       public String UpFileGuid { get;set; }
    
       ...
    }
    
        2
  •  1
  •   Rubens Farias    15 年前

    试试这个:

    [Serializable]
    [XmlRoot(ElementName="dmFile")]
    public class File
    {
        [XmlAttribute(AttributeName="dmUpFileGuid")]
        public string UploadGuid { get; set; }
        [XmlAttribute(AttributeName = "dmFileDescr")]
        public string Description { get; set; }
        [XmlAttribute(AttributeName = "dmFileMetaType")]
        public string MetaType { get; set; }
        [XmlAttribute(AttributeName = "dmFileGuid")]
        public string FileGuid { get; set; }
        [XmlAttribute(AttributeName = "dmMimeType")]
        public string MimeType { get; set; }
        [XmlAttribute(AttributeName = "dmFormat")]
        public string Format { get; set; }
    }
    

    并按以下方式反序列化XML:

    XmlSerializer s = new XmlSerializer(typeof(File));
    File file = s.Deserialize(new StringReader(@"<dmFile ... />")) as File;
    
        3
  •  0
  •   flq    15 年前

    您可以使用 XML串行化器 并使用为XML序列化提供的属性标记目标类。

    用正确的属性标记公共属性。应该是 XML属性属性 . 封闭类必须映射到dmfile元素上( XML根属性 ) 如果属性的调用方式不同,或者类的调用方式不同于XML元素,则需要指定XML元素/属性名。