1

次の構造の学生クラスがあります。

    public class Student
    {
       public int StudentId {get;set;}
       public string StudentName {get;set;}
       public string[] Courses {get;set;}
    }

以下のように Student クラスのデータを保存する Student.json ファイルがあります。

    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);

String 型を Student 型に変換できないという VS 2012 によって強調表示されています。json データをファイルから Student クラスに変換したいと考えています。どうすればいいですか?

4

2 に答える 2

2

ここ見てから

を呼び出すことで、より多くの運が逆シリアル化されることをお勧めします

T JsonSerializer.DeserializeFromString<T>(string value)

メソッドではなく、SerializeToString<T>あなたが望むものの逆です。したがって、非一般的に、

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

@mythz がコメントしているように、あなたはアセンブリであるため、 または 拡張機能をusing使用できServiceStack.TextますT.ToJson()string.FromJson<T>()

于 2012-11-27T17:29:39.970 に答える
0

SerializeToString以前のコードから型を返す which を使用していますstringStudentおそらく、オブジェクトを返すメソッドを試す必要があります。

私はあなたが使用しているライブラリに精通していません。を使用し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 に答える