XML 序列化和需要公共属性

本文关键字:属性 序列化 XML | 更新日期: 2023-09-27 17:56:20

在我的 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 使数据被保存(或更好:加载)公共属性。这会导致失去对数据完整性的控制。即我有一个对象的集合,我想控制要添加或删除哪些对象。我需要子类化或重新实现集合,更改 Add 和 Remove 方法以及我需要控制的任何其他方法。但是将其设为私有使我无法使用DataContractSerializer。

任何建议如何保持简单但保持对类中对象的控制?

提前感谢,
弗兰克

XML 序列化和需要公共属性

通常,

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

所以这意味着我有我的序列化"接口",它只是 POCO,然后一旦我反序列化它,我就会进行任何一致性检查并加载/适应我的实体。 在我工作的地方,我们使用我们的 Web 服务来做到这一点,在那里我们有我们的域实体和接口类。 一旦我们收到请求,我们就会根据我们的业务实体对其进行调整,然后将其传递到业务层并逆转结果的过程。

我有点将序列化视为跨越一层,因此应该验证所有输入,然后进行调整以保持最小耦合。

但这只是我的 0.02 美元