为什么Xml反序列化中的某些属性总是return null?
Why do some attributes in Xml deserialization always return null?
我想反序列化以下 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;
}
}
除了每个 Argument
的 Type
和 Object
属性总是 null
.
之外,代码正常工作
这段代码有什么问题?
改变
[XmlElement("arguments")]
public List<Argument> Arguments { get; set; }
至
[XmlArray("arguments")]
[XmlArrayItem("argument")]
public List<Argument> Arguments { get; set; }
我想反序列化以下 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;
}
}
除了每个 Argument
的 Type
和 Object
属性总是 null
.
这段代码有什么问题?
改变
[XmlElement("arguments")]
public List<Argument> Arguments { get; set; }
至
[XmlArray("arguments")]
[XmlArrayItem("argument")]
public List<Argument> Arguments { get; set; }