Пространства имен в XML - общий способ - PullRequest
0 голосов
/ 04 апреля 2019

Следующий код определяет имена элементов XML и XML-атрибутов.

public static void Main()
{
   Run test = new Run();
   test.SerializeObject("XmlNamespaces.xml");
}

public void SerializeObject(string filename)
{
   XmlSerializer mySerializer = new XmlSerializer(typeof(Books));

   TextWriter myWriter = new StreamWriter(filename);

   XmlSerializerNamespaces myNamespaces = new XmlSerializerNamespaces();
   myNamespaces.Add("books", "http://www.cpandl.com");
   myNamespaces.Add("money", "http://www.cohowinery.com");

   Book myBook = new Book();
   myBook.TITLE = "A Book Title";
   Price myPrice = new Price();
   myPrice.price = (decimal) 9.95;
   myPrice.currency = "US Dollar";
   myBook.PRICE = myPrice;
   Books myBooks = new Books();
   myBooks.Book = myBook;
   mySerializer.Serialize(myWriter,myBooks,myNamespaces);
   myWriter.Close();
}

public class Books
{
   [XmlElement(Namespace = "http://www.cohowinery.com")]
   public Book Book;
}

[XmlType(Namespace ="http://www.cpandl.com")]
public class Book
{
   [XmlElement(Namespace = "http://www.cpandl.com")]
   public string TITLE;
   [XmlElement(Namespace ="http://www.cohowinery.com")]
   public Price PRICE;
}

Интересно, возможно ли сделать его более общим?Например, в классе Books и Book используются жестко запрограммированные пространства имен.Например, ниже XmlType:

[XmlType(Namespace ="http://www.cpandl.com")]
public class Book
{
   [XmlElement(Namespace = "http://www.cpandl.com")]
   public string TITLE;
   [XmlElement(Namespace ="http://www.cohowinery.com")]
   public Price PRICE;
}

ПРИМЕЧАНИЕ: у нас есть ситуация, когда у нас одинаковые имена элементов в двух разных типах xml.Но разница в пространствах имен.

...