簡體   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