【发布时间】:2017-03-21 12:57:15
【问题描述】:
我正在尝试使用 c# 从我的构建服务器反序列化 CCTray.xml 的 XML 内容。
Tje XML 内容有一个父“Projects”元素,下面有一个“Project”元素数组。每个项目元素都有多个属性。
我创建了一个项目模型:
[XmlRoot("Projects")]
public class ProjectCollection
{
public ProjectCollection() { Projects = new List<Project>(); }
[XmlArray("Project")]
public List<Project> Projects { get; set; }
}
以及每个项目的模型:
public class Project
{
[XmlElement("Name")]
public string Name { get; set; }
[XmlElement("Activity")]
public string Activity { get; set; }
[XmlElement("lastBuildStatus")]
public string LastBuildStatus { get; set; }
[XmlElement("lastBuildLabel")]
public string LastBuildLabel { get; set; }
[XmlElement("WebUrl")]
public string WebUrl { get; set; }
[XmlElement("LastBuildTime")]
public DateTimeOffset LastBuildTime { get; set; }
}
我尝试反序列化来自 HttpClient 的响应,例如:
var xmlStream = await response.Content.ReadAsStreamAsync();
var serializer = new XmlSerializer(typeof(ProjectCollection));
var projects = (ProjectCollection)serializer.Deserialize(xmlStream);
其结果是一个空的 ProjectCollection 对象。
我知道我一定是错误地将 XML 映射到我的对象,但我看不出哪里错了。
返回的 XML 示例如下:
<?xml version="1.0" encoding="utf-8"?>
<Projects>
<Project name="Company.Project1.Api :: Build" activity="Sleeping" lastBuildStatus="Success" lastBuildLabel="1.0.0.203" lastBuildTime="2017-03-21T10:56:53" webUrl="http://build-company.com:8153/go/pipelines/Company.Project1.Api/203/Build/1" />
<Project name="Company.Project2.Api :: Build :: Build" activity="Sleeping" lastBuildStatus="Success" lastBuildLabel="1.0.0.203" lastBuildTime="2017-03-21T10:56:53" webUrl="http://build-company.com:8153/go/tab/build/detail/Company.Project2.Api/203/Build/1/Build" />
</Projects>
我需要做什么才能正确地将此 XML 反序列化为我的对象?
谢谢
【问题讨论】:
-
使用RestSharp反序列化会更容易
标签: c# asp.net xml serialization xml-parsing