=== UPDATE ===
(.Net 4.0 or higher) Reference your project to System.Runtime.Serialization.dll
Change your classes to:
RetrieveSanctionPartyList.cs
[DataContract]
public class RetrieveSanctionPartyList
{
[DataMember]
public string Spl { get; set; }
[DataMember]
public string Tech { get; set; }
[DataMember]
public string PartnerId { get; set; }
}
BaseResponse.cs
[DataContract]
public class BaseResponse
{
[DataMember]
public bool Success { get; set; }
[DataMember]
public List<string> Messages { get; set; }
public BaseResponse()
{
Messages = new List<string>();
}
public static T fromJson<T>(string json)
{
System.Runtime.Serialization.Json.DataContractJsonSerializer js = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream(System.Text.UTF8Encoding.UTF8.GetBytes(json));
T obj = (T)js.ReadObject(ms);
return obj;
}
public string toJson()
{
System.Runtime.Serialization.Json.DataContractJsonSerializer js = new System.Runtime.Serialization.Json.DataContractJsonSerializer(this.GetType());
MemoryStream ms = new MemoryStream();
js.WriteObject(ms, this);
ms.Position = 0;
StreamReader sr = new StreamReader(ms);
return sr.ReadToEnd();
}
public virtual void print()
{
Console.WriteLine("Class: " + this.GetType());
Console.WriteLine("[Success] " + this.Success);
foreach (string str in this.Messages)
Console.WriteLine("[Messages] " + str);
}
}
RetrieveSanctionPartyListResponse .cs
public class RetrieveSanctionPartyListResponse : BaseResponse
{
[DataMember]
public RetrieveSanctionPartyList RetrieveSanctionPartyList { get; set; }
public override void print()
{
base.print();
Console.WriteLine("[RetrieveSanctionPartyList.Spl] " + RetrieveSanctionPartyList.Spl);
Console.WriteLine("[RetrieveSanctionPartyList.Tech] " + RetrieveSanctionPartyList.Tech);
Console.WriteLine("[RetrieveSanctionPartyList.PartnerId] " + RetrieveSanctionPartyList.PartnerId);
}
}
Test program:
static void Main()
{
BaseResponse obj = new BaseResponse();
obj.Messages.Add("4");
obj.Messages.Add("2");
obj.Messages.Add("3");
obj.print();
string json = obj.toJson();
Console.WriteLine("Json: " + json);
BaseResponse clone = BaseResponse.fromJson<BaseResponse>(json);
Console.WriteLine("Clone: ");
clone.print();
RetrieveSanctionPartyListResponse child1 = new RetrieveSanctionPartyListResponse();
child1.Success = true;
child1.Messages.Add("Only one");
RetrieveSanctionPartyList list = new RetrieveSanctionPartyList();
list.Spl = "MySPL";
list.PartnerId = "MyPartnerId";
list.Tech = "MyTech";
child1.RetrieveSanctionPartyList = list;
child1.print();
json = child1.toJson();
Console.WriteLine("Json: " + json);
RetrieveSanctionPartyListResponse cloneChild1 = BaseResponse.fromJson<RetrieveSanctionPartyListResponse>(json);
Console.WriteLine("cloneChild1: ");
cloneChild1.print();
Console.ReadLine();
}
Ouput:
Class: WindowsForms.BaseResponse
[Success] False
[Messages] 4
[Messages] 2
[Messages] 3
Json: {"Messages":["4","2","3"],"Success":false}
Clone:
Class: WindowsForms.BaseResponse
[Success] False
[Messages] 4
[Messages] 2
[Messages] 3
Class: WindowsForms.RetrieveSanctionPartyListResponse
[Success] True
[Messages] Only one
[RetrieveSanctionPartyList.Spl] MySPL
[RetrieveSanctionPartyList.Tech] MyTech
[RetrieveSanctionPartyList.PartnerId] MyPartnerId
Json: {"Messages":["Only one"],"Success":true,"RetrieveSanctionPartyList":{"Part
nerId":"MyPartnerId","Spl":"MySPL","Tech":"MyTech"}}
cloneChild1:
Class: WindowsForms.RetrieveSanctionPartyListResponse
[Success] True
[Messages] Only one
[RetrieveSanctionPartyList.Spl] MySPL
[RetrieveSanctionPartyList.Tech] MyTech
[RetrieveSanctionPartyList.PartnerId] MyPartnerId