gpt4 book ai didi

c# - 如何设置 XML 可序列化类的参数?

转载 作者:太空宇宙 更新时间:2023-11-03 10:43:25 25 4
gpt4 key购买 nike

在此先前回答question ,我发现了如何声明一个可以序列化的类,我目前正在为自己的目的模仿它。我还有一个问题,我将如何实例化“地址”类并为其分配参数?具体来说,我不确定如何将数据绑定(bind)到“MainAddress”类,并将其绑定(bind)到整个“地址”类。我是面向对象编程的初学者。

这是我正在使用的类:

[XmlRoot("Adressess")]
public class Adressess
{
[XmlElement(ElementName = "MainAddress")]
public MainAddress Main { get; set; }

[XmlElement(ElementName = "AdditionalAddress")]
public List<AdditionalAddress> AdditionalAddresses { get; set; }
}

[XmlRoot("MainAddress")]
public class MainAddress
{
public string Country { get; set; }
public string City { get; set; }
}

[XmlRoot("AdditionalAddress")]
public class AdditionalAddress
{
public string Country { get; set; }
public string City { get; set; }
}

我基本上只是想测试我可以制作一个 XML 文件,但我不知道如何在序列化之前将数据分配给这个类。

---编辑---

感谢 DStanley 的快速回复!我能够构建我的方法并生成我希望的 XML 文件。并感谢 Mark S 的描述性回答!我以前见过你的方法,但现在它在我的上下文中有意义。我将尝试构建您的版本,因为它看起来更加稳定和灵活。

最佳答案

这就是我所做的。我首先考虑了您的核心需求,一个根节点为 <Addresses> 的 XML 文档。 , 单人必填 <Main>地址字段和 0 到多个 <AdditionalAddress>领域。我也约束了你的Address类为复杂类型。生成的 XML 模式,我称之为 AddressSchema.xsd看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd"
elementFormDefault="qualified"
xmlns="http://tempuri.org/XMLSchema.xsd"
xmlns:mstns="http://tempuri.org/XMLSchema.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
<xs:element name="Addresses">
<xs:complexType>
<xs:sequence>
<xs:element name="Main" type="Address" minOccurs="1" maxOccurs="1" />
<xs:element name="AdditionalAddresses" type="Address" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="Address">
<xs:sequence>
<xs:element name="Country" type="xs:string" />
<xs:element name="City" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:schema>

现在您已经定义了架构,我在 Visual Studio 命令提示符下使用 XSD.exe 从中创建了一个 C# 类:

xsd /c AddressSchema.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:\temp\StackExchange\24414898\XmlDesignQuestion\AddressSchema.cs'.

我不会在这里粘贴文件,但是您可以像这样实例化一个 Address 的实例:

// Instantiate the Addresses class
var addresses = new Addresses();

// Set the main address
addresses.Main = new Address
{
City = "Anywhere",
Country = "USA"
};

// Add the additional addresses
addresses.AdditionalAddresses = new Address[]
{
new Address
{
City = "Coolville",
Country = "Ireland"
},
new Address
{
City = "Awesometown",
Country = "Liberia"
}
};

这样做的好处是你得到了一个你没有用手探测的更紧密的物体。让工具为您完成工作,您将获得更多想要的东西。

首先调整您的架构,然后从中派生您的类。

关于c# - 如何设置 XML 可序列化类的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24414898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com