För att serialisera ett objekt till json i MVC3 kan man använda Json(), men då skapas objektet som serialiseras med fel namn i JavaScript där camelCase används. För att fixa detta kan man använda DataContractJsonSerializer. Här är min lösning:
public class JsonHelper { public static string Serialize<T>(T obj) { var serializer = new DataContractJsonSerializer(obj.GetType()); var ms = new MemoryStream(); serializer.WriteObject(ms, obj); string retVal = Encoding.UTF8.GetString(ms.ToArray()); ms.Dispose(); return retVal; } public static T Deserialize<T>(string json) { T obj = Activator.CreateInstance<T>(); var ms = new MemoryStream(Encoding.Unicode.GetBytes(json)); var serializer = new DataContractJsonSerializer(obj.GetType()); obj = (T)serializer.ReadObject(ms); ms.Close(); ms.Dispose(); return obj; } }
Objektet som skall serialiseras behöver några extra taggar på sig ex:
[DataContract] public class Person { [DataMember(Name="firstName")] public string FirstName { get; set; } [DataMember(Name="lastName")] public string LastName { get; set; } }
För att serialisera/deserialisera skriver man så här:
var myPerson = new Person() { FirstName = "John", LastName = "Doe" }; // Serialize string json = JSONHelper.Serialize<Person>(myPerson); // Deserialize myPerson = JSONHelper.Deserialize<Person>(json);
Koden är i princip identisk med http://pietschsoft.com/post/2008/02/NET-35-JSON-Serialization-using-the-DataContractJsonSerializer.aspx. Jag har bara ändrat från default encoding till utf8.