想把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));
}
}
}
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));
}
}
}
public class Student
我加上了[System.Runtime.Serialization.DataContract(Namespace="http://www.mzwu.com/")]就可以了,这是为什么?
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; }
}
}