मुझे एक समस्या है। मुझे अपने वेबपेज से निम्नलिखित एक्सएमएल मिल रहा है:

<data>
  <sets>
    <set>
      <name>Set A</name>
      <price>7.5</price>
      <pictures>
        <picture>
          <id>5</id>
          <name>Potret2Pasfoto.jpg</name>
          <size>1X 13X18 + 1X 10X15 + 6 pasfotos op 20X30,5</size>
          <price>7.50</price>
          <quantity>1</quantity>
        </picture>
      </pictures>
    </set>
    <set>
      <name>Set B</name>
      <price>14.45</price>
      <pictures>
        <picture>
          <id>4</id>
          <name>Potret2.jpg</name>
          <size>13 x 18 mat</size>
          <price>6.95</price>
          <quantity>1</quantity>
        </picture>
        <picture>
          <id>5</id>
          <name>Potret2Pasfoto.jpg</name>
          <size>1X 13X18 + 1X 10X15 + 6 pasfotos op 20X30,5</size>
          <price>7.50</price>
          <quantity>1</quantity>
        </picture>
      </pictures>
    </set>
    <set>
      <name>Set C</name>
      <price>13.9</price>
      <pictures>
        <picture>
          <id>4</id>
          <name>Potret2.jpg</name>
          <size>13 x 18 mat</size>
          <price>6.95</price>
          <quantity>2</quantity>
        </picture>
        <picture>
          <id>5</id>
          <name>Potret2Pasfoto.jpg</name>
          <size>13 x 18 mat</size>
          <price>6.95</price>
          <quantity>1</quantity>
        </picture>
      </pictures>
    </set>
    <set>
      <name>Set D</name>
      <price>14.45</price>
      <pictures>
        <picture>
          <id>1</id>
          <name>GroepsFoto.jpg</name>
          <size>Groepsfoto 13 x 18 mat</size>
          <price>6.95</price>
          <quantity>1</quantity>
        </picture>
        <picture>
          <id>5</id>
          <name>Potret2Pasfoto.jpg</name>
          <size>1X 13X18 + 1X 10X15 + 6 pasfotos op 20X30,5</size>
          <price>7.50</price>
          <quantity>1</quantity>
        </picture>
      </pictures>
    </set>
    <set>
      <name>Set E</name>
      <price>21.4</price>
      <pictures>
        <picture>
          <id>1</id>
          <name>GroepsFoto.jpg</name>
          <size>Groepsfoto 13 x 18 mat</size>
          <price>6.95</price>
          <quantity>1</quantity>
        </picture>
        <picture>
          <id>4</id>
          <name>Potret2.jpg</name>
          <size>13 x 18 mat</size>
          <price>6.95</price>
          <quantity>1</quantity>
        </picture>
        <picture>
          <id>5</id>
          <name>Potret2Pasfoto.jpg</name>
          <size>1X 13X18 + 1X 10X15 + 6 pasfotos op 20X30,5</size>
          <price>7.50</price>
          <quantity>1</quantity>
        </picture>
      </pictures>
    </set>
    <set>
      <name>Set F</name>
      <price>21.4</price>
      <pictures>
        <picture>
          <id>1</id>
          <name>GroepsFoto.jpg</name>
          <size>Groepsfoto 13 x 18 mat</size>
          <price>6.95</price>
          <quantity>1</quantity>
        </picture>
        <picture>
          <id>4</id>
          <name>Potret2.jpg</name>
          <size>13 x 18 mat</size>
          <price>6.95</price>
          <quantity>2</quantity>
        </picture>
        <picture>
          <id>5</id>
          <name>Potret2Pasfoto.jpg</name>
          <size>1X 13X18 + 1X 10X15 + 6 pasfotos op 20X30,5</size>
          <price>7.50</price>
          <quantity>1</quantity>
        </picture>
      </pictures>
    </set>
  </sets>
  <pictures>
    <picture>
      <id>5</id>
      <name>Potret2Pasfoto.jpg</name>
      <sizes>
        <size>
          <id>1</id>
          <name>1X 13X18 + 1X 10X15 + 6 pasfotos op 20X30,5</name>
          <price>7.50</price>
        </size>
      </sizes>
    </picture>
    <picture>
      <id>4</id>
      <name>Potret2.jpg</name>
      <sizes>
        <size>
          <id>2</id>
          <name>13 x 18 mat</name>
          <price>6.95</price>
        </size>
        <size>
          <id>4</id>
          <name>10 x 15 mat</name>
          <price>6.50</price>
        </size>
        <size>
          <id>13</id>
          <name>20 x 28 mat</name>
          <price>9.75</price>
        </size>
        <size>
          <id>14</id>
          <name>30 x 45 mat</name>
          <price>25.00</price>
        </size>
        <size>
          <id>15</id>
          <name>40 x 60 mat</name>
          <price>45.00</price>
        </size>
        <size>
          <id>16</id>
          <name>50 x 70 mat</name>
          <price>57.50</price>
        </size>
        <size>
          <id>17</id>
          <name>canvas+opspannen 20 x 28</name>
          <price>32.50</price>
        </size>
        <size>
          <id>18</id>
          <name>canvas+opspannen 30 x 45</name>
          <price>42.50</price>
        </size>
        <size>
          <id>19</id>
          <name>canvas+opspannen 40 x 60</name>
          <price>59.50</price>
        </size>
        <size>
          <id>20</id>
          <name>canvas+opspannen 50 x 70</name>
          <price>72.50</price>
        </size>
        <size>
          <id>21</id>
          <name>canvas+opspannen 60 x 80</name>
          <price>85.00</price>
        </size>
        <size>
          <id>22</id>
          <name>canvas+opspannen 70 x 100</name>
          <price>99.00</price>
        </size>
      </sizes>
    </picture>
    <picture>
      <id>1</id>
      <name>GroepsFoto.jpg</name>
      <sizes>
        <size>
          <id>2</id>
          <name>13 x 18 mat</name>
          <price>6.95</price>
        </size>
        <size>
          <id>4</id>
          <name>10 x 15 mat</name>
          <price>6.50</price>
        </size>
        <size>
          <id>13</id>
          <name>20 x 28 mat</name>
          <price>9.75</price>
        </size>
        <size>
          <id>14</id>
          <name>30 x 45 mat</name>
          <price>25.00</price>
        </size>
        <size>
          <id>15</id>
          <name>40 x 60 mat</name>
          <price>45.00</price>
        </size>
        <size>
          <id>16</id>
          <name>50 x 70 mat</name>
          <price>57.50</price>
        </size>
        <size>
          <id>17</id>
          <name>canvas+opspannen 20 x 28</name>
          <price>32.50</price>
        </size>
        <size>
          <id>18</id>
          <name>canvas+opspannen 30 x 45</name>
          <price>42.50</price>
        </size>
        <size>
          <id>19</id>
          <name>canvas+opspannen 40 x 60</name>
          <price>59.50</price>
        </size>
        <size>
          <id>20</id>
          <name>canvas+opspannen 50 x 70</name>
          <price>72.50</price>
        </size>
        <size>
          <id>21</id>
          <name>canvas+opspannen 60 x 80</name>
          <price>85.00</price>
        </size>
        <size>
          <id>22</id>
          <name>canvas+opspannen 70 x 100</name>
          <price>99.00</price>
        </size>
      </sizes>
    </picture>
  </pictures>
</data>

तो मैंने एक्सएमएल को पार्स करने के लिए बनाई गई कक्षा बनाई है। मैंने जो वर्ग बनाया है वह यहां है:

[XmlRoot("data")]
public class MyData
{
    [XmlArray("sets")]
    [XmlArrayItem("set")]
    public List<set> Sets { get; } = new List<set>();

    [XmlArray("pictures")]
    [XmlArrayItem("picture")]
    public List<SinglePicture> Fotos { get; } = new List<SinglePicture>();
}

public class set
{
    [XmlArray("pictures")]
    [XmlArrayItem("picture")]
    public List<PictureInSet> pictures { get; set; } = new List<PictureInSet>();
    public string name { get; set; }
    public float price { get; set; }
}

public class PictureInSet
{
    public int id { get; set; }
    public string name { get; set; }
    public string size { get; set; }
    public float price { get; set; }
    public int quantity { get; set; }
}

public class SinglePicture
{
    public int id { get; set; }
    public string name { get; set; }
    [XmlArray("sizes")]
    [XmlArrayItem("size")]
    public List<size> sizes { get; set; } = new List<size>();
}

public class size
{
    public int id { get; set; }
    public string name { get; set; }
    public float price { get; set; }
}

लेकिन जब मैं इसे निम्नलिखित कोड से पार्स करने का प्रयास कर रहा हूं:

var xmlString = await response.Content.ReadAsStringAsync();

var ser = new XmlSerializer(typeof(MyData));
var data = (MyData)ser.Deserialize(new StringReader(xmlString));

App.lstSets = data.Sets;
App.lstPictures = data.Pictures;

दोनों सूचियां खाली हैं। मैंने इस क्लास को पेस्ट से खास बनाया, लेकिन कुछ चीजें बदल दीं जिन्हें अनावश्यक चिपकाया गया था।

मैं क्या गलत कर रहा हूं?

1
A. Vreeswijk 5 फरवरी 2020, 01:18

1 उत्तर

सबसे बढ़िया उत्तर

आपके द्वारा उपयोग किए जा रहे xml के लिए, ये वे वर्ग हैं जिनका आपको उपयोग करने की आवश्यकता है,

    [XmlRoot(ElementName = "picture")]
        public class Picture
        {
            [XmlElement(ElementName = "id")]
            public string Id { get; set; }
            [XmlElement(ElementName = "name")]
            public string Name { get; set; }
            [XmlElement(ElementName = "size")]
            public string Size { get; set; }
            [XmlElement(ElementName = "price")]
            public string Price { get; set; }
            [XmlElement(ElementName = "quantity")]
            public string Quantity { get; set; }
            [XmlElement(ElementName = "sizes")]
            public Sizes Sizes { get; set; }
        }

        [XmlRoot(ElementName = "pictures")]
        public class Pictures
        {
            [XmlElement(ElementName = "picture")]
            public List<Picture> Picture { get; set; }
        }

        [XmlRoot(ElementName = "set")]
        public class Set
        {
            [XmlElement(ElementName = "name")]
            public string Name { get; set; }
            [XmlElement(ElementName = "price")]
            public string Price { get; set; }
            [XmlElement(ElementName = "pictures")]
            public Pictures Pictures { get; set; }
        }

        [XmlRoot(ElementName = "sets")]
        public class Sets
        {
            [XmlElement(ElementName = "set")]
            public List<Set> Set { get; set; }
        }

        [XmlRoot(ElementName = "size")]
        public class Size
        {
            [XmlElement(ElementName = "id")]
            public string Id { get; set; }
            [XmlElement(ElementName = "name")]
            public string Name { get; set; }
            [XmlElement(ElementName = "price")]
            public string Price { get; set; }
        }

        [XmlRoot(ElementName = "sizes")]
        public class Sizes
        {
            [XmlElement(ElementName = "size")]
            public List<Size> Size { get; set; }
        }

        [XmlRoot(ElementName = "data")]
        public class Data
        {
            [XmlElement(ElementName = "sets")]
            public Sets Sets { get; set; }
            [XmlElement(ElementName = "pictures")]
            public Pictures Pictures { get; set; }
        }

और deserialize करने के लिए निम्नलिखित का उपयोग करें

var ser = new XmlSerializer(typeof(Data));
var data = (Data)ser.Deserialize(new StringReader(xmlString));

List<Set> lstSets = data.Sets.Set;
List<Picture> lstPictures = data.Pictures.Picture;

यदि आप सी # में कक्षाओं और उनकी संरचना के बारे में अनिश्चित हैं, तो तत्व टैग के साथ कक्षाएं उत्पन्न करने के लिए xml2CSharp साइट का उपयोग करें।

4
Jawad 5 फरवरी 2020, 01:52