XmlSerialize jak wykonać ElementRoot z namespace

0

Mam problem z XmlSerialize gdy chce stworzyć element root z przestrzeniom nazw on mi jej nie chce wstawić mam taki cod

 
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Xml;
using System.Xml.Serialization;

namespace serializatio
{
	class Program
	{
		public static void Main(string[] args)
		{
			stream st = new stream();
            st.from = "aaa";
            st.to = "bbb";
            st.version = "1.0";
            st.xmlns.Add("stream", "http://xx.xx");
            XmlSerializer ser = new XmlSerializer(typeof(stream), "client");
			ser.Serialize(Console.Out, st, st.xmlns);
			Console.Write("Press any key to continue . . . ");
			Console.ReadKey(true);
		}
	}
    [XmlRoot(ElementName = "stream", Namespace = "stream", IsNullable = false)]
	public class stream
	{  
        [XmlNamespaceDeclarations]
        public XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces();
		[XmlAttribute("from")]
		public String from;
        [XmlAttribute("to")]
		public String to;
        [XmlAttribute("version")]
		public String version;
	}
}

i otrzymuje coś takiego

 
<?xml version="1.0"?>
<stream xmlns:stream="http://xx.xx" from="aaa" to="bbb" version="1.0" xmlns="stream" />

a chciałbym otzrymać coś takiego

 
<?xml version="1.0"?>
<stream:stream xmlns:stream="http://xx.xx" from="aaa" to="bbb" version="1.0" xmlns="stream" />
1

Jeśli chcesz użyć danej przestrzeni nazw powinieneś użyć jej nazwy a nie prefiksu.

[XmlRoot(ElementName = "stream", Namespace = "http://xx.xx"]
0

Dzięki działa brakuje mi tylko tego xmlns="stream" a potrzebuje nie wiecie może jak to jeszcze dodać

<?xml version="1.0"?>
<stream:stream xmlns:stream="http://xx.xx" from="aaa" to="bbb" version="1.0" />

Poradziłem sobie dziękuje za wszystko pozdrawiam !!!

0

A mam pytanie jak utworzyć klasę która po serializacji osiągnie taki efekt. Bo się gubię już w tym Xml nie wiem czy oni to specjalnie ten strumień tak zababrali czy co. Niestety muszę na nowo wymyślać błędne koło bo się założyłem z wykładowcom że do końca studiów dam sobie z jabberem w najprostszej postaci rade.

<stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' from='jabber.org' id='963d7a7038fddb5f' version='1.0'>
<stream:features>
<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
<mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
<mechanism>CRAM-MD5</mechanism>
<mechanism>LOGIN</mechanism>
<mechanism>PLAIN</mechanism>
<mechanism>DIGEST-MD5</mechanism>
<mechanism>SCRAM-SHA-1</mechanism>
</mechanisms>
<compression xmlns='http://jabber.org/features/compress'>
<method>zlib</method>
</compression>
<ver xmlns='urn:xmpp:features:rosterver'>
<optional/>
</ver>
</stream:features>
1

Proponuję takie rozwiązanie:

  1. Wygeneruj sobie XSD (o ile go nie znajdziesz jabber.org)
  2. Wygeneruj klasy w C# na podstawie XSD

Obie rzeczy zrobisz tym narzędziem http://msdn.microsoft.com/en-us/library/x6c1kb0s%28v=vs.71%29.aspx

1 użytkowników online, w tym zalogowanych: 0, gości: 1