我可以直接序列化一个 struct
类型吗,因为它是一个值类型。
我在类里面使用过它,但想知道它是否可以单独用于一个结构。
例如
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链接说
“我尝试让我的结构实现 ISerializable,但我无法实现所需的构造函数,因为这是一个结构而不是对象。”
是的,你可以。我只是使用以下代码这样做。
[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);
它做了什么?正是它应该具有的序列化和反序列化struct
。
输出:
{"Value1":43265,"Value2":2346,"Value3":"SE","Value4":5235.3}
43265 2346 SE 5235.3
有趣的是,这是 TestStruct
序列化 和 反序列化 到/从 JSON
。
默认构造函数怎么样? 所有 struct
对象都有一个默认构造函数,它是struct
对象的基本属性之一,并且默认构造函数只负责将struct
对象所需的内存清除为默认值。因此,序列化器
已经知道有一个默认构造函数,因此可以像它是一个常规对象一样继续处理(它是)。
注意事项:
此示例使用 System.Web.Script.Serialization.JavaScriptSerializer
。
此示例假定 struct
中的所有变量都是属性。如果不是,则此答案可能 无效。用 fields
代替 properties
似乎对我有用,但这不是最佳实践。您应该始终确保所有对象中的 public
变量都是 properties
。