मैं सी # में एक्सएमएल दस्तावेज़ को क्रमबद्ध/deserialize करना चाहता हूँ जैसे:

<library>
    <my.books genre =""classic"">
         <book title = ""1984"" author=""George Orwell"" />
         <book title = ""Robinson Crusoe"" author=""Daniel Defoe"" />
         <book title = ""Frankenstein"" author=""Mary Shelly"" />
    </my.books>
</library>";

2 महत्वपूर्ण बातें हैं:

  • तत्व "my.books" का कस्टम नाम होना चाहिए (संपत्ति का नाम नहीं)

  • my.books तत्व में एक विशेषता ("शैली") होनी चाहिए।

यहाँ मेरा कोड है (नमूना https://dotnetfiddle.net/bH5WVX पर है):

   using System;
   using System.Xml;
   using System.Xml.Linq;
   using System.Collections.Generic;
   using System.ComponentModel;
   using System.Xml.Serialization;
   using System.IO;

   public class Program
   {
    public static void Main()
    {

        Library lib = new Library(myBooks: new MyBooks(
            genre: "classic",
            booklist: new List<Book>{
                new Book("1984", "George Orwell"),
                new Book("Robinson Crusoe", "Daniel Defoe"),
                new Book("Oliver Twist", "Mary Shelly"),

            }));


          XmlSerializer formatter = new XmlSerializer(typeof(Library));

            using (StringWriter sw = new StringWriter())
            {
                formatter.Serialize(sw, lib);
                Console.Write(sw.ToString());
            }

        string desiredOutput =
                @"<library>

                    <my.books genre =""classic"">
                        <book title = ""1984"" author=""George Orwell"" />
                        <book title = ""Robinson Crusoe"" author=""Daniel Defoe"" />
                        <book title = ""Frankenstein"" author=""Mary Shelly"" />
                    </my.books>

                </library>";            
    }


[XmlRoot("library")]    
public class Library
        {
        public MyBooks MyBooks { get; set; }

        [XmlElement("my.books")] 
        public List<Book> Books { get; set; }

        public Library()
    {

    }

    public Library(MyBooks myBooks = null)
    {
        MyBooks = myBooks;
    }
}


[XmlType("my.books")]
public class MyBooks
{
     [XmlAttribute("genre")]
        public string Genre { get; set; }

     [XmlElement("book")]
        public List<Book> Booklist { get; set; }

      public MyBooks(string genre, List<Book> booklist = null)
        {
            Genre = genre;
            Booklist = booklist;
        }

          public MyBooks()
        {

        }   
}   

public class Book
    {
        [XmlAttribute("title")]
        public string Title { get; set; }
        [XmlAttribute("author")]
        public string Author { get; set; }

        public Book() { }

        public Book(string title, string author)
        {
        Title = title;
        Author = author;    
        }
    }
}

और आउटपुट है:

<library>
  <MyBooks genre="classic">
    <book title="1984" author="George Orwell" />
    <book title="Robinson Crusoe" author="Daniel Defoe" />
    <book title="Oliver Twist" author="Mary Shelly" />
  </MyBooks>
</library>

एकमात्र समस्या यह है कि मैं "MyBooks" तत्व को "my.books" नाम का उपयोग करने के लिए बाध्य नहीं कर सकता

मुझे इस विषय पर केवल एक संबंधित लेख मिला - http://www.codemeit.com/xml/c-xmlserializer-add-an-attribute-to-an-array-element.html, यह कक्षा में "XmlType" विशेषता का उपयोग करने का सुझाव देता है , लेकिन यह यहाँ काम नहीं करता।

क्या इस तत्व पर कस्टम नाम विशेषता लागू करने का कोई तरीका है?

2
Vladimir 20 अप्रैल 2018, 03:13

1 उत्तर

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

ऐसा लगता है कि आपकी विशेषता गलत संपत्ति पर थी।

ये कोशिश करें:

[System.Xml.Serialization.XmlElement("my.books")]
public MyBooks MyBooks { get; set; }

public List<Book> Books { get; set; }

मुझे अब यह आउटपुट मिलता है:

<?xml version="1.0" encoding="utf-16"?>
<library xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <my.books genre="classic">
    <book title="1984" author="George Orwell" />
    <book title="Robinson Crusoe" author="Daniel Defoe" />
    <book title="Oliver Twist" author="Mary Shelly" />
  </my.books>
</library>

शानदार लिखित प्रश्न पर अच्छा किया!

1
Enigmativity 20 अप्रैल 2018, 03:24