首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将CCTray内容XML反序列化为对象列表

将CCTray内容XML反序列化为对象列表
EN

Stack Overflow用户
提问于 2017-03-21 12:57:15
回答 1查看 40关注 0票数 0

我正在尝试用c#从构建服务器反序列化c#的XML内容。

Tje XML内容有一个父“Projects”元素,下面有一个'Project‘元素数组。每个项目元素都有多个属性。

我创建了一个项目模型:

代码语言:javascript
复制
[XmlRoot("Projects")]
public class ProjectCollection
{
    public ProjectCollection() { Projects = new List<Project>(); }

    [XmlArray("Project")]
    public List<Project> Projects { get; set; }
}

每个项目都有一个模型:

代码语言:javascript
复制
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的响应反序列化如下:

代码语言:javascript
复制
var xmlStream = await response.Content.ReadAsStreamAsync();
var serializer = new XmlSerializer(typeof(ProjectCollection));
var projects = (ProjectCollection)serializer.Deserialize(xmlStream);

其结果是一个空ProjectCollection对象。

我知道我一定是在错误地将XML映射到我的对象,但我看不出哪里有问题。

正在返回的XML示例如下:

代码语言:javascript
复制
<?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反序列化为我的对象,我需要做什么?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-21 13:19:27

您的类结构不适合您获得的数据。使用您的类结构,XML结构应该看起来不同。根需要另一个名为Project的元素。此元素包含您的项。

代码语言:javascript
复制
<?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结构,必须正确地使用简单的根,如

代码语言:javascript
复制
[XmlRoot("Projects")]
public class ProjectCollection : List<Project>
{
}

此外,您还需要更新Project的所有属性。XML Project没有任何元素,只使用XML属性来存储数据。这意味着您需要使用XmlAttribute而不是XmlElement。还请注意,名称区分大小写,这在代码中也是不正确的。

代码语言:javascript
复制
[XmlAttribute("name")]
public string Name { get; set; }
//...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42927836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档