struct student
{
name string; --string is a reference type
age int;
designation string; --string is a reference type
salary double;
};
class foo
{
foo(){
student s;
s.name = "example";
serialize(s);
}
}
This https://social.msdn.microsoft.com/Forums/vstudio/en-US/b479edea-cc9e-4755-9ef4-d54ece298306/can-a-struct-implement-iserializable-how-do-you-serialize-a-structs-private-members?forum=csharpgeneral链接说“我尝试让我的结构实现 ISerialized,但我无法实现所需的构造函数,因为这是一个结构而不是对象。”
是的你可以。我只是用下面的代码做到了这一点。
[Serializable]
public struct TestStruct
{
public int Value1 { get; set; }
public int Value2 { get; set; }
public string Value3 { get; set; }
public double Value4 { get; set; }
}
TestStruct s1 = new TestStruct();
s1.Value1 = 43265;
s1.Value2 = 2346;
s1.Value3 = "SE";
string serialized = jss.Serialize(s1);
s2 = jss.Deserialize<TestStruct>(serialized);
Console.WriteLine(serialized);
Console.WriteLine(s2.Value1 + " " + s2.Value2 + " " + s2.Value3 + " " + s2.Value4);
它做了什么?正是它应该有的,连载的 and 反序列化 the struct.
Output:
{"Value1":43265,"Value2":2346,"Value3":"SE","Value4":5235.3}
43265 2346 SE 5235.3
有趣的是,这就是TestStruct连载的 and 反序列化至/自JSON.
怎么样一个默认构造函数? Allstruct对象有一个默认构造函数,它是其中之一基本属性 of a struct对象,并且该默认构造函数仅负责清除对象所需的内存struct反对默认值。因此,serializer已经知道有一个默认构造函数,因此可以像常规对象一样继续进行(它是什么).