using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Description;
using System.Xml;
using System.ServiceModel.Dispatcher;
using System.Text;
using NUnit.Framework;
//------------------------------------------------------------------------------
//
// This code was generated by a tool.
// Runtime Version:4.0.30319.261
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
//
//------------------------------------------------------------------------------
namespace Client.EvalServiceReference {
using System.Runtime.Serialization;
using System;
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="Eval", Namespace="http://schemas.datacontract.org/2004/07/WcfServiceLibrary1")]
[System.SerializableAttribute()]
public partial class Eval : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
[System.NonSerializedAttribute()]
private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string IdField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private Client.EvalServiceReference.EvalItem[] itemsListField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private System.Collections.Generic.Dictionary itemsMapField;
[global::System.ComponentModel.BrowsableAttribute(false)]
public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
get {
return this.extensionDataField;
}
set {
this.extensionDataField = value;
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public string Id {
get {
return this.IdField;
}
set {
if ((object.ReferenceEquals(this.IdField, value) != true)) {
this.IdField = value;
this.RaisePropertyChanged("Id");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public Client.EvalServiceReference.EvalItem[] itemsList {
get {
return this.itemsListField;
}
set {
if ((object.ReferenceEquals(this.itemsListField, value) != true)) {
this.itemsListField = value;
this.RaisePropertyChanged("itemsList");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public System.Collections.Generic.Dictionary itemsMap {
get {
return this.itemsMapField;
}
set {
if ((object.ReferenceEquals(this.itemsMapField, value) != true)) {
this.itemsMapField = value;
this.RaisePropertyChanged("itemsMap");
}
}
}
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string propertyName) {
System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
if ((propertyChanged != null)) {
propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
}
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="EvalItem", Namespace="http://schemas.datacontract.org/2004/07/WcfServiceLibrary1")]
[System.SerializableAttribute()]
public partial class EvalItem : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
[System.NonSerializedAttribute()]
private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string ItemField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private System.Nullable ItemTimeField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private System.Nullable etypeField;
[global::System.ComponentModel.BrowsableAttribute(false)]
public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
get {
return this.extensionDataField;
}
set {
this.extensionDataField = value;
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public string Item {
get {
return this.ItemField;
}
set {
if ((object.ReferenceEquals(this.ItemField, value) != true)) {
this.ItemField = value;
this.RaisePropertyChanged("Item");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public System.Nullable ItemTime {
get {
return this.ItemTimeField;
}
set {
if ((this.ItemTimeField.Equals(value) != true)) {
this.ItemTimeField = value;
this.RaisePropertyChanged("ItemTime");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public System.Nullable etype {
get {
return this.etypeField;
}
set {
if ((this.etypeField.Equals(value) != true)) {
this.etypeField = value;
this.RaisePropertyChanged("etype");
}
}
}
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string propertyName) {
System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
if ((propertyChanged != null)) {
propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
}
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="EvalType", Namespace="http://schemas.datacontract.org/2004/07/WcfServiceLibrary1")]
public enum EvalType : int {
[System.Runtime.Serialization.EnumMemberAttribute()]
SIMPLE = 1,
[System.Runtime.Serialization.EnumMemberAttribute()]
COMPLEX = 2,
[System.Runtime.Serialization.EnumMemberAttribute()]
NONE = 3,
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(ConfigurationName="EvalServiceReference.IEvalService")]
public interface IEvalService {
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IEvalService/SubmitEval", ReplyAction="http://tempuri.org/IEvalService/SubmitEvalResponse")]
void SubmitEval(Client.EvalServiceReference.Eval eval);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IEvalService/GetEvals", ReplyAction="http://tempuri.org/IEvalService/GetEvalsResponse")]
Client.EvalServiceReference.Eval[] GetEvals();
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IEvalService/RemoveEval", ReplyAction="http://tempuri.org/IEvalService/RemoveEvalResponse")]
void RemoveEval(string id);
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public interface IEvalServiceChannel : Client.EvalServiceReference.IEvalService, System.ServiceModel.IClientChannel {
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public partial class EvalServiceClient : System.ServiceModel.ClientBase, Client.EvalServiceReference.IEvalService {
public EvalServiceClient() {
}
public EvalServiceClient(string endpointConfigurationName) :
base(endpointConfigurationName) {
}
public EvalServiceClient(string endpointConfigurationName, string remoteAddress) :
base(endpointConfigurationName, remoteAddress) {
}
public EvalServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :
base(endpointConfigurationName, remoteAddress) {
}
public EvalServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
base(binding, remoteAddress) {
}
public void SubmitEval(Client.EvalServiceReference.Eval eval) {
base.Channel.SubmitEval(eval);
}
public Client.EvalServiceReference.Eval[] GetEvals() {
return base.Channel.GetEvals();
}
public void RemoveEval(string id) {
base.Channel.RemoveEval(id);
}
}
}
namespace MonoTests.System.Runtime.Serialization
{
[TestFixture]
public class SerializeNullableWithDictionaryTest
{
[Test]
public void TestNullableWithDictionary()
{
string Name = "GetEvalsResult";
string Wrapper = "GetEvalsResponse";
string Namespace = "http://tempuri.org/";
Type type = typeof(Client.EvalServiceReference.Eval[]);
IEnumerable know_types = new List();
// This is the XML generated by WCF Server
string xml = " 8215784f-bf5f-4df8-b239-34a0a029a54e Item on List 3 2012-03-04T04:04:00 COMPLEX Item3 Item 2 on Map NONE ";
Client.EvalServiceReference.Eval[] evals = null;
StringBuilder stringBuilder = new StringBuilder ();
var ds = new DataContractSerializer (type, Name, Namespace, know_types);
using (var xr = XmlDictionaryReader.CreateDictionaryReader ( XmlReader.Create (new StringReader (xml))))
{
xr.ReadStartElement (Wrapper, Namespace);
for (xr.MoveToContent (); xr.NodeType == XmlNodeType.Element; xr.MoveToContent ()) {
XmlQualifiedName key = new XmlQualifiedName (xr.LocalName, xr.NamespaceURI);
if ( Name == key.Name && Namespace == key.Namespace)
break;
}
evals = (Client.EvalServiceReference.Eval[])ds.ReadObject (xr, true);
}
using (var xw = XmlDictionaryWriter.CreateDictionaryWriter ( XmlWriter.Create( new StringWriter(stringBuilder)))) {
ds.WriteObject (xw, evals);
}
string actualXml = stringBuilder.ToString ();
Assert.AreEqual (evals.Length, 1, "evals.Length missmatch");
Client.EvalServiceReference.Eval eval = evals[0];
Assert.AreEqual (eval.Id, "8215784f-bf5f-4df8-b239-34a0a029a54e", "eval.Id missmatch");
Assert.AreEqual (eval.itemsList.Length, 2, "eval.itemsList.Length missmatch");
Client.EvalServiceReference.EvalItem evalItem = eval.itemsList[0];
Assert.AreEqual (evalItem.Item, "Item on List 3", "evalItem.Item missmatch");
Assert.AreEqual (evalItem.ItemTime , DateTime.Parse("2012-03-04T04:04:00"), "evalItem.ItemTime missmatch");
Assert.AreEqual (evalItem.etype, Client.EvalServiceReference.EvalType.COMPLEX, "evalItem.etype missmatch");
Client.EvalServiceReference.EvalItem evalItem2 = eval.itemsList[1];
Assert.IsNull (evalItem2, "evalItem2 missmatch");
Assert.AreEqual (eval.itemsMap.Count, 2, "eval.itemsMap.Count missmatch");
Client.EvalServiceReference.EvalItem evalItem3 = eval.itemsMap["Item3"];
Assert.AreEqual (evalItem3.Item, "Item 2 on Map", "evalItem3.Item missmatch");
Assert.IsNull (evalItem3.ItemTime, "evalItem3.ItemTime missmatch");
Assert.AreEqual (evalItem3.etype, Client.EvalServiceReference.EvalType.NONE, "evalItem3.etype missmatch");
Client.EvalServiceReference.EvalItem evalItem4 = eval.itemsMap[""];
Assert.IsNull(evalItem4, "Item 2 on Map", "evalItem4");
Client.EvalServiceReference.Eval[] evals2 = null;
using (var xr = XmlDictionaryReader.CreateDictionaryReader ( XmlReader.Create (new StringReader (actualXml))))
{
evals2 = (Client.EvalServiceReference.Eval[])ds.ReadObject (xr, true);
}
Assert.AreEqual (evals2.Length, 1, "evals2.Length missmatch");
Client.EvalServiceReference.Eval eval2 = evals2[0];
Assert.AreEqual (eval2.Id, "8215784f-bf5f-4df8-b239-34a0a029a54e", "eval2.Id missmatch");
Assert.AreEqual (eval2.itemsList.Length, 2, "eval2.itemsList.Length missmatch");
Client.EvalServiceReference.EvalItem eval2Item = eval2.itemsList[0];
Assert.AreEqual (eval2Item.Item, "Item on List 3", "eval2Item.Item missmatch");
Assert.AreEqual (eval2Item.ItemTime , DateTime.Parse("2012-03-04T04:04:00"), "eval2Item.ItemTime missmatch");
Assert.AreEqual (eval2Item.etype, Client.EvalServiceReference.EvalType.COMPLEX, "eval2Item.etype missmatch");
Client.EvalServiceReference.EvalItem eval2Item2 = eval2.itemsList[1];
Assert.IsNull (eval2Item2, "eval2Item2 missmatch");
Assert.AreEqual (eval2.itemsMap.Count, 2, "eval2.itemsMap.Count missmatch");
Client.EvalServiceReference.EvalItem eval2Item3 = eval2.itemsMap["Item3"];
Assert.AreEqual (eval2Item3.Item, "Item 2 on Map", "eval2Item3.Item missmatch");
Assert.IsNull (eval2Item3.ItemTime, "eval2Item3.ItemTime missmatch");
Assert.AreEqual (eval2Item3.etype, Client.EvalServiceReference.EvalType.NONE, "eval2Item3.etype missmatch");
Client.EvalServiceReference.EvalItem eval2Item4 = eval.itemsMap[""];
Assert.IsNull(eval2Item4, "eval2Item4 missmatch");
}
}
}