[英]Null value on xml deserialization using [XmlAttribute]
I have the following XML; 我有以下XML;
<?xml version="1.0" encoding="UTF-8" ?>
<feedback>
<report_metadata>
<org_name>example.com</org_name>
</report_metadata>
</feedback>
and the following Feedback.cs class; 和以下的Feedback.cs类;
[XmlRoot("feedback", Namespace = "", IsNullable = false)]
public class Feedback
{
[XmlElement("report_metadata")]
public MetaData MetaData { get; set; }
}
[XmlType("report_metadata")]
public class MetaData
{
[XmlAttribute("org_name")]
public string Organisation { get; set; }
}
When I attempt to deserialize, the value for Organisation is null. 当我尝试反序列化时,Organization的值为null。
var xml = System.IO.File.ReadAllText("example.xml");
var serializer = new XmlSerializer(typeof(Feedback));
using (var reader = new StringReader(input))
{
var feedback = (Feedback)serializer.Deserialize(reader);
}
Yet, when I change Feedback.cs to the following, it works (obviously the property name has changed). 然而,当我将Feedback.cs更改为以下内容时,它可以工作(显然属性名称已更改)。
[XmlType("report_metadata")]
public class MetaData
{
//[XmlAttribute("org_name")]
public string org_name { get; set; }
}
I want the property to be Organisation, not org_name. 我希望该属性是组织,而不是org_name。
In the example XML file org_name
is an XML element, not an XML attribute. 在示例XML文件中,
org_name
是XML元素,而不是XML属性。 Changing [XmlAttribute("org_name")]
to [XmlElement("org_name")]
at the Organisation
property will deserialize it as an element: 在
Organisation
属性中将[XmlAttribute("org_name")]
更改为[XmlElement("org_name")]
会将其反序列化为元素:
[XmlElement("org_name")]
public string Organisation { get; set; }
probably just typo 可能只是错字
[XmlAttribute("org_name")]
public string Organisation { get; set; }
was supposed to be 应该是
[XmlElement("org_name")]
public string Organisation { get; set; }
Try to modify your Xml classes like 尝试修改你的Xml类
[XmlRoot(ElementName = "report_metadata")]
public class MetaData
{
[XmlElement(ElementName = "org_name")]
public string Organisation { get; set; }
}
[XmlRoot(ElementName = "feedback")]
public class Feedback
{
[XmlElement(ElementName = "report_metadata")]
public MetaData MetaData { get; set; }
}
Then you will get your desired output like 然后你会得到你想要的输出
class Program
{
static void Main(string[] args)
{
Feedback feedback = new Feedback();
var xml = System.IO.File.ReadAllText(@"C:\Users\Nullplex6\source\repos\ConsoleApp4\ConsoleApp4\Files\XMLFile1.xml");
var serializer = new XmlSerializer(typeof(Feedback));
using (var reader = new StringReader(xml))
{
feedback = (Feedback)serializer.Deserialize(reader);
}
Console.WriteLine($"Organization: {feedback.MetaData.Organisation}");
Console.ReadLine();
}
}
Output: 输出:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.