通过XML序列化生成XML与c#属性混淆
本文关键字:XML 属性 序列化 通过 | 更新日期: 2023-09-27 17:54:38
这是我的xml
<?xml version="1.0" encoding="windows-1252"?>
<OpenShipments xmlns="x-schema:C:'UPSLabel'OpenShipments.xdr">
<OpenShipment ShipmentOption="" ProcessStatus="">
<ShipTo>
<CompanyOrName>DARMOT Sp. z o.o</CompanyOrName>
<Attention>DARMOT Sp. z o.o</Attention>
<Address1>Ojca Damiana Tynieckiego 46</Address1>
<Address2></Address2>
<Address3>DarÂ3owo</Address3>
<CountryTerritory>PL</CountryTerritory>
<PostalCode>76-150</PostalCode>
<CityOrTown>DarÂ3owo</CityOrTown>
<StateProvinceCounty></StateProvinceCounty>
<Telephone>943143185</Telephone>
</ShipTo>
<ShipmentInformation>
<ServiceType>UPS Standard</ServiceType>
<NumberOfPackages>1</NumberOfPackages>
<DescriptionOfGoods>Remanufactured auto parts</DescriptionOfGoods>
<BillingOption>PP</BillingOption>
</ShipmentInformation>
<Package>
<PackageType>CP</PackageType>
<Weight>1</Weight>
<Reference1>OUR:AWP0021</Reference1>
<Reference2>Job # 41149</Reference2>
<DeclaredValue>
<Amount>999</Amount>
</DeclaredValue>
</Package>
</OpenShipment>
</OpenShipments>
,我需要通过c#中的XML序列化从我的类生成。所以请指导我如何编写类结构来获得上面的xml。
如果仔细看我的XML,就会发现很少有带有属性的标签。
<OpenShipments xmlns="x-schema:C:'UPSLabel'OpenShipments.xdr">
所以如何写属性,将有属性像上面一个ShipmentOption=" ProcessStatus=",也请告诉我如何生成xmlns像xmlns="x-schema:C:'UPSLabel' open出货。带有open出货标签的xdr"。在这里,我不知道如何处理这种情况,xml中的路径不固定…C:'UPSLabel' openships .xdr。它将根据条件不同而有所不同。所以请详细指导我如何为上面的XML编写类。由于
打开Visual Studio命令提示符。然后使用xsd.exe工具为您完成这项工作:
C:'work>xsd.exe test.xml
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 4.0.30319.1]
Copyright (C) Microsoft Corporation. All rights reserved.
Writing file 'C:'work'test.xsd'.
C:'work>xsd.exe /classes test.xsd
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 4.0.30319.1]
Copyright (C) Microsoft Corporation. All rights reserved.
Writing file 'C:'work'test.cs'.
其中test.xml
是您在帖子中显示的文件。如您所见,这将生成test.cs
,其中包含可用于反序列化此XML的类:
using (var reader = XmlReader.Create("test.xml"))
{
var serializer = new XmlSerializer(typeof(OpenShipments));
var openShipments = (OpenShipments)serializer.Deserialize(reader);
// TODO: do something with those shipments like for example shipping them :-)
}
您可以使用XElement类(System.Xml.Linq)。例子:
XElement element = new XElement("OpenShipments");
XAttribute attribute = new XAttribute("xmlns", @"x-schema:C:'UPSLabel'OpenShipments.xdr");
element.Add(attribute);
如果路径不是固定的,你可以这样做:
string path = "C:'..."; // get your path here
XAttribute attribute = new XAttribute("xmlns", @"x-schema:" + path);