反序列化json服务器端

时间:2009-07-20 17:47:22

标签: asp.net jquery json

如何将从javascript(使用jquery.ajax)发送的json对象反序列化为.aspx页面(不是Web服务)?

e.g。如果我有以下json对象;

var json = {"name" : "michael", "surname" : "brown", "age" : "35"}

我用

$.post('process.aspx', json)

如何在process.aspx代码中反序列化json?

另外,我如何在我的情况下使用$ .postJSON()?

3 个答案:

答案 0 :(得分:3)

您可以使用内置于.Net 3.5中的DataContractJsonSerializer,或者我们使用的是一个很棒的开源Json库:http://jayrock.berlios.de/

要使用DataContractJsonSerializer,您的代码可能如下所示:

var serializer = new DataContractJsonSerializer(typeof(Person));
using (MemoryStream ms = new MemoryStream(new ASCIIEncoding().GetBytes(myString)))
{
  try
  {
    Person obj = serializer.ReadObject(ms) as Person;
  }
  catch (Exception e)
  {
    throw new InvalidOperationException("Could not deserialize Person.", e);
  }
}

答案 1 :(得分:1)

NewtonSoft库是个不错的选择。

答案 2 :(得分:1)

您可以使用DataContractJsonSerializer

class Program
{
    [DataContract]
    class Person
    {
        [DataMember(Name = "name")]
        public string Name { get; set; }
        [DataMember(Name = "surname")]
        public string Surname { get; set; }
        [DataMember(Name="age")]
        public int Age { get; set; }
    }

    static void Main(string[] args)
    {
        var json = @"{""name"" : ""michael"", ""surname"" : ""brown"", ""age"" : ""35""}";

        var serializer = new DataContractJsonSerializer(typeof(Person));
        using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(json)))
        {
            var person = (Person)serializer.ReadObject(stream);
            Console.WriteLine("Name : {0}, Surname : {1}, Age : {2}", 
                person.Name, person.Surname, person.Age);
        }
    }
}