1 #if !MOBILE && !MONOMAC
4 using System.Runtime.Serialization;
6 using System.Diagnostics;
7 using System.Xml.Serialization;
8 using System.Globalization;
9 using System.ComponentModel;
10 using System.ServiceModel;
11 using System.ServiceModel.Channels;
12 using System.ServiceModel.Description;
14 using System.CodeDom.Compiler;
15 using NUnit.Framework;
17 namespace MonoTests.System.Runtime.Serialization
20 public class Bug666333Test
23 public void Bug666333 ()
25 // xml : original xml in the test
26 // xml2 : when it is *appropriately* serialized
27 // xml3 : mixed, d4p1:activeuser comes first
28 // xml4 : mixed, d4p1:activeuser comes second
29 // (Note that d4p1:activeuser is the actual element to be deserialized which takes precedence over urn:foo activeuser.)
32 <CheckLoginResponse xmlns='http://tempuri.org/'>
37 <email>FOO@BAR.com</email>
38 <lastcheck>2011-01-21T22:50:52.02</lastcheck>
41 <responsemessage>Acceso correcto, creado nuevo hkey!</responsemessage>
42 <responsecode>1</responsecode>
50 <CheckLoginResponse xmlns='http://tempuri.org/'>
51 <playeractiveuser xmlns:d4p1='http://schemas.datacontract.org/2004/07/' xmlns:i='http://www.w3.org/2001/XMLSchema-instance'>
53 <d4p1:email i:nil='true' />
54 <d4p1:hkey i:nil='true' />
55 <d4p1:id>idd</d4p1:id>
56 <d4p1:lastcheck i:nil='true' />
59 <d4p1:langId i:nil='true' />
60 <d4p1:responsecode>100</d4p1:responsecode>
61 <d4p1:responsemessage i:nil='true' />
64 </CheckLoginResponse>";
67 <CheckLoginResponse xmlns='http://tempuri.org/'>
68 <playeractiveuser xmlns:d4p1='http://schemas.datacontract.org/2004/07/' xmlns:i='http://www.w3.org/2001/XMLSchema-instance'>
70 <d4p1:email i:nil='true' />
71 <d4p1:hkey i:nil='true' />
72 <d4p1:id>iddd</d4p1:id>
73 <d4p1:lastcheck i:nil='true' />
75 <activeuser xmlns='urn:foo'>
76 <email i:nil='true' />
79 <lastcheck i:nil='true' />
81 <response xmlns='urn:foo'>
82 <langId i:nil='true' />
83 <responsecode>200</responsecode>
84 <responsemessage i:nil='true' />
87 </CheckLoginResponse>";
90 <CheckLoginResponse xmlns='http://tempuri.org/'>
91 <playeractiveuser xmlns:d4p1='http://schemas.datacontract.org/2004/07/' xmlns:i='http://www.w3.org/2001/XMLSchema-instance'>
92 <activeuser xmlns='urn:foo'>
93 <email i:nil='true' />
96 <lastcheck i:nil='true' />
99 <d4p1:email i:nil='true' />
100 <d4p1:hkey i:nil='true' />
101 <d4p1:id>iddd</d4p1:id>
102 <d4p1:lastcheck i:nil='true' />
104 <response xmlns='urn:foo'>
105 <langId i:nil='true' />
106 <responsecode>200</responsecode>
107 <responsemessage i:nil='true' />
110 </CheckLoginResponse>";
112 var tm = TypedMessageConverter.Create (typeof (CheckLoginResponse), "urn:foo");
113 var m = Message.CreateMessage (MessageVersion.Default, "urn:foo", XmlReader.Create (new StringReader (xml)));
114 m = Message.CreateMessage (MessageVersion.Default, "urn:foo", XmlReader.Create (new StringReader (xml2)));
115 m = Message.CreateMessage (MessageVersion.Default, "urn:foo", XmlReader.Create (new StringReader (xml3)));
116 var clr = (CheckLoginResponse) tm.FromMessage (m);
117 Assert.IsNotNull (clr.playeractiveuser, "#1");
118 Assert.IsNotNull (clr.playeractiveuser.activeuser, "#2");
119 Assert.AreEqual ("iddd", clr.playeractiveuser.activeuser.id, "#3");
121 m = Message.CreateMessage (MessageVersion.Default, "urn:foo", XmlReader.Create (new StringReader (xml4)));
122 Assert.AreEqual ("iddd", clr.playeractiveuser.activeuser.id, "#4");
131 [GeneratedCode("System.ServiceModel", "4.0.0.0"), DebuggerStepThrough, EditorBrowsable(EditorBrowsableState.Advanced), MessageContract(WrapperName="CheckLoginResponse", WrapperNamespace="http://tempuri.org/", IsWrapped=true)]
132 public class CheckLoginResponse
135 [MessageBodyMember(Namespace="http://tempuri.org/", Order=0), XmlElement(IsNullable=true)]
136 public PlayerActiveUser playeractiveuser;
139 public CheckLoginResponse()
143 public CheckLoginResponse(PlayerActiveUser playeractiveuser)
145 this.playeractiveuser = playeractiveuser;
150 [GeneratedCode("System.Xml", "4.0.30319.1"), DebuggerStepThrough, XmlType(Namespace="http://tempuri.org/")]
151 public class PlayerActiveUser : INotifyPropertyChanged
154 private ActiveUserReference activeuserField;
155 //private PropertyChangedEventHandler PropertyChanged;
156 private Response responseField;
159 public event PropertyChangedEventHandler PropertyChanged;
162 protected void RaisePropertyChanged(string propertyName)
164 PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
165 if (propertyChanged != null)
167 propertyChanged(this, new PropertyChangedEventArgs(propertyName));
172 [XmlElement(Order=0)]
173 public ActiveUserReference activeuser
177 return this.activeuserField;
181 this.activeuserField = value;
182 this.RaisePropertyChanged("activeuser");
186 [XmlElement(Order=1)]
187 public Response response
192 return this.responseField;
196 this.responseField = value;
197 this.RaisePropertyChanged("response");
203 [XmlType(Namespace="http://tempuri.org/"), GeneratedCode("System.Xml", "4.0.30319.1"), DebuggerStepThrough]
204 public class Response : INotifyPropertyChanged
207 private int? langIdField;
208 //private PropertyChangedEventHandler PropertyChanged;
209 private int? responsecodeField;
210 private string responsemessageField;
213 public event PropertyChangedEventHandler PropertyChanged;
216 protected void RaisePropertyChanged(string propertyName)
218 PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
219 if (propertyChanged != null)
221 propertyChanged(this, new PropertyChangedEventArgs(propertyName));
226 [XmlElement(IsNullable=true, Order=2)]
231 return this.langIdField;
235 this.langIdField = value;
236 this.RaisePropertyChanged("langId");
240 [XmlElement(IsNullable=true, Order=1)]
241 public int? responsecode
245 return this.responsecodeField;
249 this.responsecodeField = value;
250 this.RaisePropertyChanged("responsecode");
254 [XmlElement(Order=0)]
255 public string responsemessage
259 return this.responsemessageField;
263 this.responsemessageField = value;
264 this.RaisePropertyChanged("responsemessage");
270 [XmlType(Namespace="http://tempuri.org/"), DebuggerStepThrough, GeneratedCode("System.Xml", "4.0.30319.1")]
271 public class ActiveUserReference : ESObject
274 private string emailField;
275 private string hkeyField;
276 private string idField;
277 private DateTime? lastcheckField;
280 [XmlElement(Order=2)]
285 return this.emailField;
289 this.emailField = value;
290 base.RaisePropertyChanged("email");
294 [XmlElement(Order=1)]
299 return this.hkeyField;
303 this.hkeyField = value;
304 base.RaisePropertyChanged("hkey");
308 [XmlElement(Order=0)]
317 this.idField = value;
318 base.RaisePropertyChanged("id");
322 [XmlElement(IsNullable=true, Order=3)]
323 public DateTime? lastcheck
327 return this.lastcheckField;
331 this.lastcheckField = value;
332 base.RaisePropertyChanged("lastcheck");
338 [XmlType(Namespace="http://tempuri.org/"), GeneratedCode("System.Xml", "4.0.30319.1"), XmlInclude(typeof(ActiveUserReference)), DebuggerStepThrough]
339 public abstract class ESObject : INotifyPropertyChanged
342 //private PropertyChangedEventHandler PropertyChanged;
345 public event PropertyChangedEventHandler PropertyChanged;
352 protected void RaisePropertyChanged(string propertyName)
354 PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
355 if (propertyChanged != null)
357 propertyChanged(this, new PropertyChangedEventArgs(propertyName));