我正在尝试用c#从构建服务器反序列化c#的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反序列化为我的对象,我需要做什么?
谢谢
发布于 2017-03-21 13:19:27
您的类结构不适合您获得的数据。使用您的类结构,XML结构应该看起来不同。根需要另一个名为Project的元素。此元素包含您的项。
<?xml version="1.0" encoding="utf-8"?>
<Projects>
<Project>
<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" />
</Project>
</Projects>要获得数据,根据XML结构,必须正确地使用简单的根,如
[XmlRoot("Projects")]
public class ProjectCollection : List<Project>
{
}此外,您还需要更新Project的所有属性。XML Project没有任何元素,只使用XML属性来存储数据。这意味着您需要使用XmlAttribute而不是XmlElement。还请注意,名称区分大小写,这在代码中也是不正确的。
[XmlAttribute("name")]
public string Name { get; set; }
//...https://stackoverflow.com/questions/42927836
复制相似问题