我做了一個叫MyData的類,然後用[Serializable接口]標記,但它似乎並沒有工作...如何在C#中將標記類標記爲[Serializable]?
這裏的MyData.cs:
namespace Forms_Bot_Rebuild
{
[Serializable]
public class MyData
{
private String _Email;
private String _Password;
private String _WorldId;
public MyData(string email, string password, string worldid)
{
_Email = email;
_Password = password;
_WorldId = worldid;
}
public string Email
{ get { return _Email; } set { _Email = value; } }
public string Password
{ get { return _Password; } set { _Password = value; } }
public string WorldId
{ get { return _WorldId; } set { _WorldId = value; } }
}
}
這裏的Form1.cs中:
private void button1_Click(object sender, EventArgs e)
{
MyData data = new MyData(boxEmail.Text, boxPass.Text, boxWorldId.Text);
string objectNode = Serialize.ToJsonString(data);
File.WriteAllText(Application.StartupPath + @"\LoginData.json", objectNode);
}
private void button2_Click(object sender, EventArgs e)
{
object myData;
myData = Serialize.Deserialize<MyData>(new FileStream(Application.StartupPath + @"\LoginData.json", FileMode.Open));
boxEmail.Text = data.Email;
boxPass.Text = data.Password;
boxWorldId.Text = data.WorldId;
}
這裏的Serialize.cs:
public class Serialize
{
public static StreamReader ToStreamReader(object o)
{
MemoryStream stream = new MemoryStream();
DataContractJsonSerializer ser = new DataContractJsonSerializer(o.GetType());
ser.WriteObject(stream, o);
stream.Position = 0;
StreamReader sr = new StreamReader(stream);
return sr;
}
public static string ToJsonString(object o)
{
MemoryStream stream = new MemoryStream();
DataContractJsonSerializer ser = new DataContractJsonSerializer(o.GetType());
ser.WriteObject(stream, o);
stream.Position = 0;
StreamReader sr = new StreamReader(stream);
return sr.ReadToEnd();
}
public static object Deserialize<T>(Stream stream)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
stream.Position = 0;
T t = (T)ser.ReadObject(stream);
return t;
}
}
此外,該代碼被賦予到m我的朋友,所以我問他。他也無法理解。我問另一位朋友,我認爲他知道體面的C#,但他無法修復它。
類型「System.Runtime.Serialization.SerializationException」的未處理的異常發生在System.Runtime.Serialization.dll
其他信息:期待元件從命名空間「根」「」 ..遇到「無」與名字'',名字空間''。
有沒有意見?
使用[Serializable]屬性非常好,它只是選擇性退出而不是選擇性輸入。 –
@BenediktSchroeder默認情況下,它只序列化字段,而不是屬性,所以我不會稱之爲「退出」。我會稱它爲「只有域名,除非退出(域)+選入(屬性)」 – xanatos