想把Json转换成对象,在网上找了资料,调试老是提出错误(如下),这是为什么?
An unhandled exception of type 'System.Runtime.Serialization.InvalidDataContractException' occurred in System.Runtime.Serialization.dllAdditional information: 无法序列化类型“JsonTest.Student”。可以考虑使用 DataContractAttribute 属性对其进行标记,以及使用 DataMemberAttribute 属性标记所有想要序列化的该类型的成员。有关其他支持的类型,请参阅 Microsoft .NET Framework 文档。代码如下:
 class Student
    {
        private string _Name;
        private int _Age;        public Student(string name, int age)
        {
            _Name = name;
            _Age = age;
        }        public string Name
        {
            set { _Name = value; }
            get { return _Name; }
        }        public int Age
        {
            set { _Age = value; }
            get { return _Age; }
        }
    } class Program
    {
        static void Main(string[] args)
        {
            System.Runtime.Serialization.Json.DataContractJsonSerializer json = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(Student));
            using (MemoryStream stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes("{\"Age\":20,\"Name\":\"张三\"} ")))
            {
                Student stu = (Student)json.ReadObject(stream);
                Console.Write(string.Format("name:{0},age:{1}", stu.Name, stu.Age));
            }
        }
    }

解决方案 »

  1.   

    类需要是公开的:
    public class Student
      

  2.   

    加上[DataContract]这个是什么意思?
    我加上了[System.Runtime.Serialization.DataContract(Namespace="http://www.mzwu.com/")]就可以了,这是为什么?
      

  3.   

    异常说的很明白了,你建一个WCF服务程序有自带的数据契约的定义的,你看看就明白了,你可以像下面一样写代码,还是不懂为什么,搜下WCF数据契约[DataContract]
    class Student
        {
            private string _Name;
            private int _Age;
         
            public Student(string name, int age)
            {
                _Name = name;
                _Age = age;
            }        [DataMember]
            public string Name
            {
                set { _Name = value; }
                get { return _Name; }
            }
            [DataMember]
            public int Age
            {
                set { _Age = value; }
                get { return _Age; }
            }
        }