【发布时间】:2022-01-19 20:16:29
【问题描述】:
我正在尝试反序列化一个 xml 文档。我创建了包含自定义对象以存储值的类,但由于某种原因,它不会反序列化任何用于 XmlElement 的内容。
主要:
using System;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
namespace Bring_Uppgift
{
class Program
{
static void Main(string[] args)
{
Transport T = new Transport();
String filepath = @"C:***\Bing Uppgift";
XmlSerializer serializer = new XmlSerializer(typeof(Transport));
//StringReader reader = new StringReader(filepath + "\\test1.xml");
//FileStream file = new FileStream(filepath + "\\test1.xml", FileMode.Open, FileAccess.Read);
//StreamReader reader = new StreamReader(filepath + "\\test1.xml");
using (StreamReader reader = new StreamReader(filepath + "\\test1.xml"))
{
T = (Transport)serializer.Deserialize(reader);
}
Console.ReadLine();
}
}
}
运输类:
using System;
using System.Collections.Generic;
using System.Xml;
using System.Xml.Serialization;
namespace Bring_Uppgift
{
[Serializable]
[XmlRoot(ElementName = "Transport", Namespace = "http://bring.com/TransportV13R0i")]
public class Transport
{
[XmlElement(ElementName = "MessageDetails")]
public MessageDetails MessageDetails { get; set; }
[XmlElement(ElementName = "ConsignmentStructure")]
public ConsignmentStructure ConsignmentStructure { get; set; }
[XmlAttribute(AttributeName = "collaboration")]
public string Collaboration { get; set; }
[XmlAttribute(AttributeName = "messageFunction")]
public string MessageFunction { get; set; }
[XmlAttribute(AttributeName = "testIndicator")]
public string TestIndicator { get; set; }
[XmlAttribute(AttributeName = "messageId")]
public string MessageId { get; set; }
[XmlAttribute(AttributeName = "ns1", Namespace = "http://www.w3.org/2000/xmlns/")]
public string Ns1 { get; set; }
}
}
还有 xml 码头:
<ns1:Transport collaboration="Instruction" messageFunction="Instruction" testIndicator="NO" messageId="00376516406000" xmlns:ns1="http://bring.com/TransportV13R0i">
<MessageDetails>
<MessageSender partyId="953675080" idType="30">
<Contact contactFunction="">
<ContactName>Bring Test</ContactName>
<ComDetails comType="Phone">1234567</ComDetails>
</Contact>
<OriginatingSystem>
<SystemId>BRINGMB</SystemId>
</OriginatingSystem>
</MessageSender>
</MessageDetails>
<ConsignmentStructure structureType="Single">
<ConsignmentSet updateIndicator="Original">
<Consignment consignmentId="70712345678901234" idType="730">
<ControlTotals>
<NumberOfPackages>2</NumberOfPackages>
<GrossWeight unitCode="KGM">70</GrossWeight>
</ControlTotals>
<Reference referenceType="CMR">
<ReferenceNo>70713245679801234</ReferenceNo>
</Reference>
<Reference referenceType="CU">
<ReferenceNo>41234</ReferenceNo>
</Reference>
<Reference referenceType="ANT">
<ReferenceNo>4123456</ReferenceNo>
</Reference>
<Reference referenceType="DM">
<ReferenceNo>70712345678901234</ReferenceNo>
</Reference>
</Consignment>
</ConsignmentSet>
</ConsignmentStructure>
</ns1:Transport>
但是当我运行代码时,MessageDetails 和 ConsignmentStructure 不知何故为空。 The result
我错过了什么?
【问题讨论】:
-
有什么理由不直接从 Visual Studio 生成类而不是自己输入?
-
xmlns:ns1="http://bring.com/TransportV13R0i"不是默认命名空间,因此该命名空间中实际存在的唯一 XML 元素是根元素本身<ns1:Transport>。所有其他人都在空名称空间中。您可以通过应用[XmlType(Namespace = "")]来指定,相反,属性默认始终位于空命名空间中,因此它们可以成功反序列化。
标签: c# xml deserialization