1

次のコードがありますが、逆シリアル化できません。どこが間違っているかわかりますか? 最初の配列項目の最初のレコードのみをキャッチします。

[XmlRootAttribute("Booking")]
        public class Reservation
        {
            [XmlArray("Included")]
            [XmlArrayItem("Meals")]
            public Meals[] Food { get; set; }

            [XmlArrayItem("Drinks")]
            public Drinks[] Drink { get; set; }

        }

        public class Meals
        {
            [XmlAttribute("Breakfast")]
            public string Breakfast { get; set; }

            [XmlAttribute("Lunch")]
            public string Lunch { get; set; }

            [XmlAttribute("Dinner")]
            public string Dinner { get; set; }
        }

        public class Drinks
        {
            [XmlAttribute("Soft")]
            public string Softs { get; set; }

            [XmlAttribute("Beer")]
            public string Beer { get; set; }

            [XmlAttribute("Wine")]
            public string Wine { get; set; }
        }

関連する XML は次のとおりです。

<?xml version="1.0" standalone="yes"?>
<Booking>
    <Included>
        <Meals  
        Breakfast="True" 
        Lunch="True" 
        Dinner="False">
        </Meals>
        <Drinks 
            Soft="True"
            Beer="False"
            Wine="False">
        </Drinks>
    </Included>
    <Included>
        <Meals  
        Breakfast="True" 
        Lunch="False" 
        Dinner="False">
        </Meals>
        <Drinks 
            Soft="True"
            Beer="True"
            Wine="True">
        </Drinks>
    </Included>
</Booking>

私は少し初心者なので、どんな助けも素晴らしいでしょう.

4

2 に答える 2

0

次の例を使用して、この構文をListItem配列に適用します。

[XmlType("device_list")]
[Serializable]
public class DeviceList {
    [XmlAttribute]
    public string type { get; set; }

    [XmlElement( "item" )]
    public ListItem[] items { get; set; }
}

次のリンクには、すべての構文と属性が含まれています

http://msdn.microsoft.com/en-us/library/2baksw0z.aspx

于 2013-10-09T07:11:42.157 に答える
0

あなたのクラス構造を XML 文書に一致させる明確な方法がわかりません。基盤となる組織はかなり異なっているようです。

次のクラス階層は、提供した XML ドキュメントから簡単に逆シリアル化できます (ドキュメントが一般的なケースをカバーしていると仮定します)。

[Serializable]
[XmlRoot("Booking")]
public class Booking : List<Included>
{
}

[Serializable]
public class Included
{
    public Meals Meals { get; set; }
    public Drinks Drinks { get; set; }
}

public class Meals
{
    [XmlAttribute("Breakfast")]
    public string Breakfast { get; set; }

    [XmlAttribute("Lunch")]
    public string Lunch { get; set; }

    [XmlAttribute("Dinner")]
    public string Dinner { get; set; }
}

public class Drinks
{
    [XmlAttribute("Soft")]
    public string Softs { get; set; }

    [XmlAttribute("Beer")]
    public string Beer { get; set; }

    [XmlAttribute("Wine")]
    public string Wine { get; set; }
}

次に、逆シリアル化コードは次のようになります: (serializedObjectは、シリアル化されたオブジェクトを含む文字列です)

XmlSerializer ser = new XmlSerializer(typeof (string));
XmlReader reader = XmlTextReader.Create(new StringReader(serializedObject));
var myBooking = ser.Deserialize(reader) as Booking;
于 2013-10-09T08:20:43.807 に答える