1

我有以下结构的学生班:

    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 突出显示它无法将字符串类型转换为学生类型。我想将 json 数据从文件转换为学生类。我该怎么做?

4

2 回答 2

2

看完这里

我建议您通过调用

T JsonSerializer.DeserializeFromString<T>(string value)

方法,而不是与SerializeToString<T>您想要的相反的方法。所以非一般,

Student studinfo = JsonSerializer.DeserializeFromString<Student>(stud);

正如@mythz 所评论的那样,由于您是using程序ServiceStack.Text集,因此您可以只使用T.ToJson()or扩展名。string.FromJson<T>()

于 2012-11-27T17:29:39.970 回答
0

您正在使用SerializeToStringwhich 从您的早期代码中返回一个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; }
}
于 2012-11-27T16:54:32.583 回答