c# - 使用构造函数序列化来自类的数据

标签 c# serialization xml-serialization

我正在尝试寻找最佳实践或一些公认的设计模式来序列化不是为序列化而构建的类。下面是我目前实现的方法:

例如,考虑一些我需要构造函数的简单类:

public class Coord
{

    public int x { get; private set;}
    public int y { get; private set;}

    public Coord(int x, int y)
    {
        this.x = x;
        this.y = y;
    }

}

如果我想序列化它,我不能不将这些字段公开为完全公开的,并提供一个无参数的构造函数。

创建一些其他类来保存我想要序列化的值是否可以接受:

public class DataItem
{
    public int x;
    public int y;
}

然后可能有在这些类之间构建和加载的方法

public static DataItem saveCoord (Coord c)
    {
        DataItem result = new DataItem ();
        result.x = c.x;
        result.y = c.y;

        return result;
    }

public static Coord loadCoord (DataItem di)
    {
        Coord result = new Coord (di.x, di.y);
        return result;
    }

然后我可以对我的 DataItem 类执行任何序列化操作。

对这种方法的批评可能是什么?是否有更好的、既定的模式?

对不起,如果我的问题很糟糕,我是新手!

最佳答案

正如 Jeroen van Langen 指出的那样,如果您想完全控制序列化的发生方式,那么 ISerializable 是您需要实现的,但这可能是一项非常重要的任务,如果您需要对许多类执行此操作,则更是如此.

我个人通常会倾向于您的第二个示例,但如果我可以绕过 Coord 而不是,我不会尝试将数据项类设为传输类,因为在这种情况下它们似乎是“数据”。使坐标公开且可序列化,而不是数据项。

关于c# - 使用构造函数序列化来自类的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37566316/

相关文章:

c# - 在确定推荐时我应该使用 Request.UrlReferrer

c# - 用于将颜色代码替换为颜色名称的脚本?

c# - Moq.Mock<T> - 如何设置采用表达式的方法

javascript - 表单序列化总是返回空字符串

c# - 当一个类继承自List<>时,XmlSerializer不序列化其他属性

asp.net - 来自 Web API 的 XML 响应中的 CData

javascript - 将行添加到 ASP.NET MVC 表时更新连接的数据库表

serialization - multiprocessing.pool.MaybeEncodingError : Error sending result: Reason: 'TypeError("cannot serialize '_io.BufferedReader' object", )'

c# - 如何循环遍历文件获取数据?

.net - 当列名包含空格时,为什么我的 DataTable 不能正确序列化?