From 5fc5f02c461b45fdf562993591289ea003578ec4 Mon Sep 17 00:00:00 2001 From: Atsushi Eno Date: Tue, 2 Aug 2011 13:51:35 -0700 Subject: [PATCH] Merge pull request #145 from ngraziano/99b87f07af0beed3a887 Fix Service Model Xml Serialization and XMLAttributes --- .../XmlMessagesFormatter.cs | 1 + .../TypedMessageConverterTest.cs | 73 ++++++++++++++++++++++ 2 files changed, 74 insertions(+) diff --git a/mcs/class/System.ServiceModel/System.ServiceModel.Dispatcher/XmlMessagesFormatter.cs b/mcs/class/System.ServiceModel/System.ServiceModel.Dispatcher/XmlMessagesFormatter.cs index 2e7d672315e..859dacabe68 100644 --- a/mcs/class/System.ServiceModel/System.ServiceModel.Dispatcher/XmlMessagesFormatter.cs +++ b/mcs/class/System.ServiceModel/System.ServiceModel.Dispatcher/XmlMessagesFormatter.cs @@ -65,6 +65,7 @@ namespace System.ServiceModel.Dispatcher m.IsReturnValue = isReturnValue; m.MemberName = partDesc.Name; m.MemberType = partDesc.Type; + m.XmlAttributes = new XmlAttributes(partDesc.MemberInfo); return m; } diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/TypedMessageConverterTest.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/TypedMessageConverterTest.cs index eb9b672ebdf..63f4ba55c3e 100644 --- a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/TypedMessageConverterTest.cs +++ b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/TypedMessageConverterTest.cs @@ -34,7 +34,9 @@ using System.ServiceModel; using System.ServiceModel.Channels; using System.ServiceModel.Description; using System.ServiceModel.Dispatcher; +using System.Text; using System.Xml; +using System.Xml.Serialization; using NUnit.Framework; namespace MonoTests.System.ServiceModel.Description @@ -119,6 +121,49 @@ namespace MonoTests.System.ServiceModel.Description Assert.AreEqual ("test", t2.echo.msg, "#01"); Assert.AreEqual ("testtest", t2.body2, "#02"); } + + + [Test] + public void XmlSerializerdWithXmlAttribute() + { + TypedMessageConverter c = TypedMessageConverter.Create ( + typeof (Test3), "http://tempuri.org/MyTest", + new XmlSerializerFormatAttribute ()); + + + string xmlMessage = @" + http://tempuri.org/MyTest + + + OneID + + foo + 2 + + + bar + 3 + + + + "; + + byte[] buffer = Encoding.UTF8.GetBytes(xmlMessage); + using (XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(buffer, XmlDictionaryReaderQuotas.Max)) + { + Message messagedisk = Message.CreateMessage(reader, int.MaxValue, MessageVersion.Soap12); + Test3 obj = c.FromMessage(messagedisk) as Test3; + Assert.IsNotNull(obj); + Assert.AreEqual("OneID", obj.Id); + Assert.IsNotNull(obj.ArrayOfElement); + Assert.AreEqual(2, obj.ArrayOfElement.Length); + Assert.AreEqual("foo", obj.ArrayOfElement[0].Prop1); + Assert.AreEqual(3, obj.ArrayOfElement[1].Prop2); + } + } + + } [MessageContract (WrapperNamespace = "space", WrapperName = "MyName")] @@ -146,4 +191,32 @@ namespace MonoTests.System.ServiceModel.Description [MessageBodyMember (Name = "body", Namespace = "urn:foo")] public Echo Body { get; set; } } + + [MessageContract(WrapperName = "test", + WrapperNamespace = "urn:foo", + IsWrapped = true)] + public class Test3 + { + + [MessageBodyMember()] + [XmlElementAttribute()] + public string Id; + + [MessageBodyMember()] + [XmlElement(Type = typeof(ElementType), ElementName = "Element")] + public ElementType[] ArrayOfElement; + + } + + [Serializable] + [XmlType(Namespace = "urn:bar")] + public class ElementType + { + [XmlElement(Order = 0)] + public string Prop1 { get; set; } + + [XmlElement(Order = 1)] + public int Prop2 { get; set; } + } + } -- 2.11.4.GIT