【发布时间】:2017-06-06 15:33:03
【问题描述】:
我在一个我无法控制的结构中接收 XML,并尝试使用 C# 反序列化 XML。 XML 包含多个名称空间。大多数 XML 位于 1 个命名空间中,但有一部分在不同的命名空间中具有属性。我的问题是内容节点总是被反序列化为空。我需要做什么来纠正这个问题?
我的 XML 如下所示。
<Documents xmlns="http://mycompany.com/api/v2" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Document>
<Id>100000</Id>
<Title>Document Title</Title>
<Locale>en-US</Locale>
<Status>Archived</Status>
<PublishDate>2016-06-01T16:40:00</PublishDate>
<PublishDateUTC>2016-06-01T21:40:00Z</PublishDateUTC>
<UpdateDateUTC>2016-06-01T21:40:00Z</UpdateDateUTC>
<Companies>
<Company>
<Id>1C000TX2343</Id>
<Name>Company Name</Name>
<Status>Public</Status>
<OperationStatus>N</OperationStatus>
<Country>USA</Country>
</Company>
</Companies>
<Content i:type="CRCMinute">
<AssetClass>Corporate</AssetClass>
<CommitteeAlphaRating>BB+</CommitteeAlphaRating>
<CommitteeCreditTrend>Negative</CommitteeCreditTrend>
<CommitteeMeetingDate>2016-06-01T00:00:00</CommitteeMeetingDate>
<CreditWatch i:nil="true"/>
<RatingStatus i:nil="true"/>
<ShortTermRating i:nil="true"/>
<SignatureDate>2016-06-01T16:40:00</SignatureDate>
<SignatureText>Alfred Neumann</SignatureText>
</Content>
</Document>
</Documents>
还提供了我用来反序列化 XML 的类。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Xml.Serialization;
namespace Morningstar.CreditRatings.CorporateShortTerm
{
[XmlRoot("Documents")]
public class RPSDocuments
{
[XmlElement("Document")]
public List<DocumentData> DocumentData { get; set; }
}
[Serializable]
public class DocumentData
{
[XmlElement]
public string Id { get; set; }
[XmlElement]
public string Title { get; set; }
[XmlElement]
public string PublishDate { get; set; }
[XmlElement]
public string PublishDateUTC { get; set; }
[XmlElement]
public string UpdateDateUTC { get; set; }
[XmlArray("Companies")]
[XmlArrayItem("Company")]
public List<CompanyData> Companies { get; set; }
[XmlElement("Content", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public DocumentContentData Content { get; set; }
}
[Serializable]
public class CompanyData
{
[XmlElement]
public string Id { get; set; }
public string Name { get; set; }
[XmlElement]
public string Status { get; set; }
[XmlElement]
public string OperationStatus { get; set; }
[XmlElement]
public string Country { get; set; }
}
[Serializable]
public class DocumentContentData
{
[XmlElement]
public string Analyst { get; set; }
[XmlElement]
public string AssetClass { get; set; }
[XmlElement]
public string CommitteeAlphaRating { get; set; }
[XmlElement]
public string CommitteeCreditTrend { get; set; }
[XmlElement]
public string CommitteeMeetingDate { get; set; }
[XmlElement]
public string CreditWatch { get; set; }
[XmlElement]
public string RatingStatus { get; set; }
[XmlElement]
public string ShortTermRating { get; set; }
[XmlElement]
public string SignatureDate { get; set; }
[XmlElement]
public string SignatureText { get; set; }
}
}
【问题讨论】:
-
更改 RPSDocuments : [XmlRoot(ElementName = "Documents", Namespace = "mycompany.com/api/v2")]
标签: c# xml xml-deserialization