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; }

FruitElementFruitNameおよびを取得しますFruitPriceFruitOriginInfoだけを取得します。 OtherInfoFiberPercentage人で検索します。

下のすべての情報<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

The best way is to write XSD schema for the XML and generate class from XSD schema using XSD.exe, this way you can validate that always XML and class matches to XSD and never have issue with Serialization/ Deserialization.

You can create batch file like below to generate class from xsd schema:

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

You can see more usage examples at above link for XSD.exe. It will generate partial classes so you can easily extend it further if required.

于 2013-02-26T13:23:15.073 に答える