通过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编写类。由于

通过XML序列化生成XML与c#属性混淆

打开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);