3
<Fruits>

            <FruitName>Amla</FruitName> 
            <FruitPrice>10 US DOLLARS</FruitPrice> 

            <Origin>
                <Country>INDIA</Country> 
                <NativeName>GOOSEBERRY</NativeName> 
                <Availability>PLENTY</Availability> 
            </Origin>

            <OtherInfo>
                <FiberPercentage>1.11</FiberPercentage> 
                <MagnesiumPercentage>0.02</MagnesiumPercentage> 
            </OtherInfo>

在 De 序列化上述 XML 结构时,我使用类似的东西,

xml

XmlElement("FruitsList")]
public List<Fruits> FruitsImport { get; set; }

在水果课上,我有类似的东西:

    [XmlAnyElement]
    public List<XmlElement> FruitElements { get; set; }

    [XmlElement("Origin")]
    public List<XmlElement> FruitOrigin { get; set; }

    [XmlElement("OtherInfo")]
    public List<XmlElement> OtherInfo { get; set; }

FruitElement检索FruitNameand FruitPriceFruitOrigin单独检索国家InfoOtherInfo独自返回FiberPercentage

关于如何获取<Origin><OtherInfo>标签下的所有信息的任何想法?

4

2 回答 2

4

<origin>因为在和标记中都嵌套了元素,所以<otherinfo>在执行反序列化时还需要为它们定义一个类。

[XmlElement("Origin")]
public List<Origins> FruitOrigin { get; set; }

您可以像定义水果类一样定义原产地类。

(Origin 类的骨架如下所示:

[Serializable]
public class Origin
{
    [XmlAnyElement]
    public List<XmlElement> OriginElements { get; set; }
}

)

于 2013-02-26T13:11:48.963 回答
1

最好的方法是为 XML 编写 XSD 架构并使用XSD.exe从 XSD 架构生成类,这样您就可以验证 XML 和类始终与 XSD 匹配,并且永远不会出现序列化/反序列化问题。

您可以像下面这样创建批处理文件以从 xsd 模式生成类:

del Configuration.AutoGenerated.cs
"%ProgramFiles%\Microsoft SDKs\Windows\v6.0A\bin\xsd" Test.Configuration.xsd /c /n:Test.Configuration 

rename Test_Configuration.cs Configuration.AutoGenerated.cs
pause

您可以在上面的 XSD.exe 链接中查看更多使用示例。它将生成部分类,因此您可以在需要时轻松地进一步扩展它。

于 2013-02-26T13:23:15.073 回答