我的学生班有以下结构:
public class Student
{
public int StudentId {get;set;}
public string StudentName {get;set;}
public string[] Courses {get;set;}
}
我有一个student.json文件,它保存Student类的数据,如下所示:
public void SaveStudentData(Student stud, string path) //stud is an object of student class that has student information
{
string studinfo = JsonSerializer.SerializeToString<Student>(stud);
StreamWriter sw = File.OpenText(path);
sw.Write(studinfo);
}
但是,当我尝试使用以下代码检索数据时:
public Student GetStudentData(string path)
{
StreamReader sr = File.OpenText(path);
string stud = sr.ReadToEnd();
sr.Close();
Student studinfo =JsonSerializer.SerializeToString<Student>(stud);
return studinfo;
}
该行
Student studinfo =JsonSerializer.SerializeToString<Student>(stud);
VS 2012突出显示表示它无法将String类型转换为Student类型。我想将json数据从file转换为Student类。我该怎么办?
答案 0 :(得分:2)
我建议你通过调用
来反序列化更多运气T JsonSerializer.DeserializeFromString<T>(string value)
方法,而不是SerializeToString<T>
,它与您想要的相反。非常一般,
Student studinfo = JsonSerializer.DeserializeFromString<Student>(stud);
由于您是using
ServiceStack.Text
程序集,因此可以使用T.ToJson()
或string.FromJson<T>()
扩展程序,如@mythz所述。
答案 1 :(得分:0)
您正在使用SerializeToString
,您之前的代码会返回string
类型。也许你应该尝试一个返回Student
对象的方法。
我不熟悉您正在使用的库。您可以使用DataContractJsonSerializer
对对象进行序列化和反序列化。
public void Save(Student student, string path)
{
FileStream fs = new FileStream(path, FileMode.OpenOrCreate);
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Student));
ser.WriteObject(fs, student);
fs.Close();
}
public Student Load(string path)
{
FileStream fs = new FileStream(path, FileMode.Open);
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Student));
Student s = (Student)ser.ReadObject(fs);
fs.Close();
return s;
}
学生对象被装饰的地方
[DataContract]
public class Student
{
[DataMember]
public int StudentId { get; set; }
[DataMember]
public string StudentName { get; set; }
[DataMember]
public string[] Courses { get; set; }
}