I don't see a whole lot wrong with the code so I'm thinking your problem might be with the serialization itself. I have several websites written in PHP that I use JSON serialization and encrypted data to pull down orders that have come in through the sites instead of going to each database individually to process the orders. I accomplish this through Data Contracts in a C# app.
I've attached some snippets from a couple of my classes for example I hope they help answer your question.
First I set up a my data contract class
using System;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
namespace WebOrders
{
[DataContract]
public class OrderItem
{
public OrderItem() { }
[DataMember]
public string orderID { get; set; }
[DataMember]
public string qty { get; set; }
[DataMember]
public string productID { get; set; }
[DataMember]
public string mfrPartNumber { get; set; }
[DataMember]
public string price { get; set; }
}
}
Then I use a utility class that has a generic enumerator to handle all serialization and deserialization transactions...
public static IEnumerable<t> GetValues<t>()
{
return Enum.GetValues(typeof(T)).Cast<t>();
}
public static string Serialize<t>(T obj)
{
System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType());
MemoryStream ms = new MemoryStream();
serializer.WriteObject(ms, obj);
string ret = Encoding.Default.GetString(ms.ToArray());
ms.Dispose();
return ret;
}
public static T Deserialize<t>(string json)
{
T obj = Activator.CreateInstance<t>();
MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json));
System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType());
obj = (T)serializer.ReadObject(ms);
ms.Close();
ms.Dispose();
return obj;
}
Usage is as follows:
OrderItem orderitem = Deserialize<OrderItem>(o);
Hope you find this useful, I know I sure did...
-Smith