c# - XML 序列化和需要公共(public)属性

标签 c# serialization architecture xml-serialization

在我的 Silverlight 4 应用程序中,我通过 DataContractSerializer XML 序列化保存我的对象——这非常简单:

public byte[] SerializeModel(ServiceModel model)
{
    System.Runtime.Serialization.DataContractSerializer serializer = new System.Runtime.Serialization.DataContractSerializer(typeof(ServiceModel));
    System.IO.MemoryStream ms = new System.IO.MemoryStream();

    serializer.WriteObject(ms, model);

    byte[] bytes = ms.ToArray();
    ms.Close();

    return bytes;
}

...并通过以下方式轻松加载它们:

public ServiceModel DeserializeModel(string stream)
{
    System.Runtime.Serialization.DataContractSerializer serializer = new System.Runtime.Serialization.DataContractSerializer(typeof(ServiceModel));
    System.Xml.XmlReader reader = System.Xml.XmlReader.Create(new System.IO.StringReader(stream));

    object result = serializer.ReadObject(reader);

    return (ServiceModel)result;
}

(省略错误处理)

我的问题是,我需要使用 getter 和 setter 使要保存(或更好:加载)的数据成为公共(public)属性。这会导致失去对数据完整性的控制。 IE。我有一个对象集合,我想控制要添加或删除的对象。我需要子类化或重新实现集合,更改添加和删除方法以及我需要控制的任何其他方法。但将其设为私有(private)使我无法使用 DataContractSerializer。

关于如何保持简单但保持对类中对象的控制有什么建议吗?

提前致谢,
弗兰克

最佳答案

通常我在这些情况下所做的是将我的序列化对象保留为 POCO(只是获取/设置),然后一旦我反序列化它们,我将做任何我需要进行的额外检查并酌情抛出/错误处理。

所以这意味着我有我的序列化“接口(interface)”,它只是 POCO,然后一旦我反序列化它,我就会进行任何一致性检查并加载/适应我的实体。在我工作的地方,我们通过我们的网络服务来实现这一点,我们有我们的领域实体和我们的接口(interface)类。一旦我们收到请求,我们就会将其调整为我们的业务实体,然后将其传递到业务层并逆向处理结果。

我有点将序列化视为跨层,因此所有输入都应经过验证,然后进行调整以将耦合保持在最低限度。

但这只是我的 0.02 美元

关于c# - XML 序列化和需要公共(public)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5979806/

相关文章:

java对象序列化readObject/defaultReadObject

python - Python 生成器可以轻松保存并从磁盘重新加载吗?

java - 缓存系统如何实现?

c# - 具有多级嵌套关系版本控制的对象

c# - 服务器和客户端应用程序之间的推送通知机制

c# - ToString() 方法如何在类中被覆盖和格式化?

c# - WCF 服务代理生成在通过 F5 负载平衡器公开时引发错误

c# - 无法将json解析成对象

architecture - 在 MongoDB 中存储单个 "first-class"列表的惯用方法?

c# - EF 关系 - 由于 list<guid> 是原始的而无法映射