c# - 结构是否可以序列化

标签 c# oop serialization struct

<分区>

我可以直接序列化一个 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

关于c# - 结构是否可以序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30400876/

相关文章:

oop - 方法调用作为另一个方法调用的参数?

c# - 在.NET中使用Win32 API模拟按钮点击

c# - 如何设置文件夹的最大大小?

c# - 从 sharepoint 2010 服务器读取文件夹和文件属性,例如 UniqueId

c# - 使用反射从 C# 对象中去除所有值

javascript - 重写一个javascript方法

c++ - 如何在 C++ 中跨实例调用方法

php - 未捕获异常 'Exception',消息为 'Serialization of ' SimpleXMLElement' is not allowed'

java - Spring 无法通过requestBody将String转换为Date

Flutter:发布结束,退出代码为 255