反序列化

时间:2016-12-07 15:31:18

标签: c# xml

<?xml version="1.0" encoding="UTF-8"?>
<EfxTransmit
	xmlns="http://www.....abc"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www....def http://www....ghi">
	<EfxReport requestNumber="1" reportId="CNCONSUMERCREDITFILE">
		<CNConsumerCreditReports>
			....I only care about these
			....I only care about these
			....I only care about these
		</CNConsumerCreditReports>
	</EfxReport>
</EfxTransmit>

我创建了一个类似于此的对象模式:

[XmlRoot("CNConsumerCreditReports")]
public class Data
{
    [XmlElement("CNConsumerCreditReport")]
    public CNConsumerCreditReports CNConsumerCreditReports { get; set; }
}

但为了使该模式起作用,我必须手动从XML字符串中删除以下内容以及结束结束标记

<EfxTransmit
	xmlns="http://www.....abc"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www....def http://www....ghi">
	<EfxReport requestNumber="1" reportId="CNCONSUMERCREDITFILE">

但是,我发现手动删除这些标签很麻烦,我希望找到一种解决方法。我只是不知道是什么或如何。但我相信有更好的方法。

感谢任何建议或剪切代码!

谢谢。

1 个答案:

答案 0 :(得分:1)

鉴于几乎没有其他东西,反序列化整个文档比尝试提取你想要的片段更容易。

您还需要将模型属性中的名称空间与XML中的名称空间进行匹配。

类似于:

[XmlRoot(Namespace="http://www.....abc")]
public class EfxTransmit
{
    public EfxReport EfxReport { get; set; }
}

public class EfxReport
{
    public CNConsumerCreditReports CNConsumerCreditReports { get; set; }
}

public class CNConsumerCreditReports
{
    public CNConsumerCreditReport CNConsumerCreditReport { get; set; }
}

public class CNConsumerCreditReport
{
    // ...
}