繁体   English   中英

XML-Serialization和需要的公共属性

[英]XML-Serialization and the need public properties

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

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;
}

(错误处理ommited)

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

有什么建议如何保持简单,但保持对类内对象的控制?

提前致谢,
坦率

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

所以这意味着我有序列化的“接口”,它只是POCO,然后一旦我反序列化它,我做任何一致性检查并加载/适应我的实体。 在我工作的地方,我们使用我们的网络服务,我们拥有域实体和接口类。 一旦我们收到请求,我们就会将其调整到我们的业务实体,然后将其传递到业务层并反转结果流程。

我认为序列化是跨越一层,因此所有输入都应该被验证,然后适应以保持耦合最小化。

但那只是我0.02美元

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM