c# - Convert XML to C# object
问题描述
I am having difficulty trying to convert my XML to a C# object. This needs to be done dynamically. I think the problem exists somewhere in the c# object class.
The XML
<Sites>
<PostCodeValidatedSite>
<Address>
<ALK>A00067262524</ALK>
<BuildingName>1 The Pavilions</BuildingName>
<CSSDistrictCode>CM</CSSDistrictCode>
<ExchangeCode>SOL</ExchangeCode>
<IsPostCodeValid>true</IsPostCodeValid>
<Locality>Shirley</Locality>
<PostCode>B90 4SB</PostCode>
<PostTown>Solihull</PostTown>
<Qualifier>Gold</Qualifier>
<Street>Cranmore Drive</Street>
<Technologies>
<Technology>
<IsAssociated>true</IsAssociated>
<IsRestricted>false</IsRestricted>
<Name>Copper</Name>
</Technology>
<Technology>
<IsAssociated>true</IsAssociated>
<IsRestricted>false</IsRestricted>
<Name>PointToPointFibre</Name>
</Technology>
<Technology>
<IsAssociated>false</IsAssociated>
<IsRestricted>false</IsRestricted>
<Name>FTTPBrownfield</Name>
</Technology>
<Technology>
<IsAssociated>false</IsAssociated>
<IsRestricted>false</IsRestricted>
<Name>FTTPGreenfield</Name>
</Technology>
</Technologies>
</Address>
<Coordinates>
<Easting>413358</Easting>
<Latitude>52.39657</Latitude>
<Longitude>-1.79875</Longitude>
<Northing>278082</Northing>
</Coordinates>
</PostCodeValidatedSite>
<PostCodeValidatedSite>
<Address>
<ALK>A15100427347</ALK>
<BuildingName>1 The Pavilions</BuildingName>
<CSSDistrictCode>CM</CSSDistrictCode>
<ExchangeCode>SOL</ExchangeCode>
<IsPostCodeValid>true</IsPostCodeValid>
<Locality>Shirley</Locality>
<PostCode>B90 4SB</PostCode>
<PostTown>Solihull</PostTown>
<Qualifier>Gold</Qualifier>
<Street>Cranmore Drive</Street>
<SubBuilding>Floor 001-Room Comm</SubBuilding>
<Technologies>
<Technology>
<IsAssociated>false</IsAssociated>
<IsRestricted>false</IsRestricted>
<Name>Copper</Name>
</Technology>
<Technology>
<IsAssociated>true</IsAssociated>
<IsRestricted>false</IsRestricted>
<Name>PointToPointFibre</Name>
</Technology>
<Technology>
<IsAssociated>false</IsAssociated>
<IsRestricted>false</IsRestricted>
<Name>FTTPBrownfield</Name>
</Technology>
<Technology>
<IsAssociated>false</IsAssociated>
<IsRestricted>false</IsRestricted>
<Name>FTTPGreenfield</Name>
</Technology></Technologies>
</Address>
<Coordinates>
<Easting>413358</Easting>
<Latitude>52.39657</Latitude>
<Longitude>-1.79875</Longitude>
<Northing>278082</Northing>
</Coordinates>
</PostCodeValidatedSite>
</Sites>
The serialisation code:
string Outerxml = xmlToFormat.FirstChild.FirstChild.FirstChild.FirstChild.LastChild.FirstChild.FirstChild.OuterXml;
string formatedXml = XmlFormatter.RemoveXmlns(Outerxml);
List<Address> result = new List<Address>(); ;
// Deserialises xlm into an object
XmlSerializer serializer = new XmlSerializer(typeof(List<Address>), new XmlRootAttribute("Address"));
using (TextReader reader = new StringReader(formatedXml))
{
result = (List<Address>)serializer.Deserialize(reader);
}
return result;
My object Class:
public class Address
{
[XmlElement("ALK")]
public string ALK { get; set; }
[XmlElement("BuildingName")]
public string BuildingName { get; set; }
[XmlElement("CSSDistrictCode")]
public string CSSDistrictCode { get; set; }
[XmlElement("IsPostCodeValid")]
public Boolean IsPostCodeValid { get; set; }
[XmlElement("Locality")]
public string Locality { get; set; }
[XmlElement("PostCode")]
public string PostCode { get; set; }
[XmlElement("PostTown")]
public string PostTown { get; set; }
[XmlElement("Qualifier")]
public string Qualifier { get; set; }
[XmlElement("Street")]
public string Street { get; set; }
}
}
At the moment I do not receive any errors just an empty array.Please let me know if you require any further information.
解决方案
添加以下类
[Serializable, XmlRoot("Sites")]
public class Sites
{
[XmlElement("PostCodeValidatedSite")]
public List<PostCodeValidatedSite> PostCodeValidatedSites { get; set; }
}
public class PostCodeValidatedSite
{
public Address Address { get; set; }
}
然后以这种方式反序列化它
XmlSerializer serializer = new XmlSerializer(typeof(Sites));
using (TextReader reader = new StringReader(formatedXml))
{
var result = (Sites)serializer.Deserialize(reader);
}
PS:我没有添加Coordinates
声明,因为您似乎只对数据感兴趣Address
,否则以与您相同的方式声明它Address
并将其添加到PostCodeValidatedSite
类中。
推荐阅读
- python - 无法从 newegg.com 的 price-save-percent 容器中提取文本
- python - python中的2D和3D频谱图
- r - R:阶乘的尾随零数
- spring-boot - 创建类路径资源中定义的名称为“entityManagerFactory”的bean时出错:模式验证:缺少表[association_value_entry]
- java - Java:为什么函数的 ArrayList 参数会影响不同的 ArrayList
- javascript - Reactjs 让一个组件可以被其他组件控制的最佳实践?
- php - 在用户中止匹配之前执行 SQL 查询
- android - Android - API 级别 21 中的日期
- matlab - 从与中心线相切的矩阵中提取点
- java - Hibernate - 保存方法的返回值而不是字段