代码之家  ›  专栏  ›  技术社区  ›  user366312

为什么XML反序列化中的某些属性总是返回空值?

  •  0
  • user366312  · 技术社区  · 7 年前

    我要反序列化以下XML文件:

    <?xml version="1.0" encoding="utf-8"?>
    <function xmlns="urn:google.com" >
      <file>my.xml</file>
      <name>My</name>
      <arguments>
        <argument type="int" object="a"/>
        <argument type="char" object="b"/>
      </arguments>
      <return_type>int</return_type>
      <sql>MySql</sql>
      <content>xyz</content>
    </function>
    

    . 因此,我编写了以下代码:

    public class Argument 
    {
        [XmlAttribute("type")]
        public string Type { get; set; }
    
        [XmlAttribute("object")]
        public string Object { get; set; }
    }
    
    [XmlRoot("function", Namespace = "urn:google.com")]
    public class Function
    {
        [XmlElement("file")]
        public string File { get; set; }
    
        [XmlElement("name")]
        public string Name { get; set; }
    
        [XmlElement("sql")]
        public string Sql { get; set; }
    
        [XmlElement("return_type")]
        public string ReturnType{ get; set; }
    
        [XmlElement("arguments")]
        public List<Argument> Arguments { get; set; }
    
        [XmlElement("content")]
        public string Content { get; set; }
    
        public static Function Deserialize(string fullPath)
        {
            XmlSerializer deserializer = new XmlSerializer(typeof(Function));
            TextReader reader = new StreamReader(fullPath);
            object obj = deserializer.Deserialize(reader);
    
            Function f = (Function)obj;
            reader.Close();
    
            return f;
        }
    }
    

    代码正在工作,除了 Type Object 每个的属性 Argument 总是 null .

    这个代码有什么问题?

    1 回复  |  直到 7 年前
        1
  •  2
  •   user2179293    7 年前

    更改

    [XmlElement("arguments")]
    public List<Argument> Arguments { get; set; }
    

    [XmlArray("arguments")]
    [XmlArrayItem("argument")]
    public List<Argument> Arguments { get; set; }