已包含在xmlAny元素中的XML元素数组的序列化

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>

当我解析上述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用于获取FruitNameFruitPriceFruitOrigin仅检索国家InfoOtherInfo仅检索FiberPercentage

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

2个回答

4

由于您在<origin><otherinfo>标签中都有嵌套元素,因此在执行反序列化时,您需要为它们定义一个类。

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

你需要像水果类一样定义原始类。
(原始类的框架应该如下所示:
[Serializable]
public class Origin
{
    [XmlAnyElement]
    public List<XmlElement> OriginElements { get; set; }
}

)


@现在是那个不得被提及的人。很高兴能帮到你,我的荣幸。 - TtT23

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的使用示例。它会生成部分类,所以如果需要,你可以轻松地进一步扩展它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接