2011-12-02 37 views
0

我有一個自定義類型UserSettingConfig我想保存在我的數據庫中,我想將它保存爲純XML,因爲類型可能稍後會更改,遷移純XML比一個二進制對象。將datacontract序列化對象保存爲字符串以保存在sql db中

public class Serialize 
{ 
    private readonly DataContractSerializer _serializer; 

    public Serialize() 
    { 
     _serializer = new DataContractSerializer(typeof(UserSettingConfig)); 
    } 

    public string SerializeObject(UserSettingConfig userSettingConfig) 
    { 
     using (var memoryStream = new MemoryStream()) 
     { 
      _serializer.WriteObject(memoryStream, userSettingConfig); 

      string userSettingXml = memoryStream.ToString(); 

      memoryStream.Close(); 

      return userSettingXml; 
     } 
    } 

    public UserSettingConfig DeSerializeObject(string userSettingXml) 
    { 
     UserSettingConfig userSettingConfig; 

     using (var stream = new MemoryStream(userSettingXml)) 
     { 
      stream.Position = 0; 
      userSettingConfig = (UserSettingConfig)_serializer.ReadObject(stream); 
     } 

     return userSettingConfig; 
    } 
} 

這不工作的內存流需要一個字節數組或INT

我想我的序列化到返回一個字符串(我可以在我的數據庫保存爲VARCHAR(MAX))

回答

1

DataContractSerializer.WriteObject有一個過載需要XmlWriter。您可以構建那些將XML寫入到StringBuilder之一:

private static string SerializeToString(object objectToSerialize) 
{ 
    var serializer = new DataContractSerializer(objectToSerialize.GetType()); 
    var output = new StringBuilder(); 
    var xmlWriter = XmlWriter.Create(output); 

    serializer.WriteObject(xmlWriter, objectToSerialize); 
    xmlWriter.Close(); 

    return output.ToString(); 
} 
+0

不知道該怎麼做 – Mech0z

+0

好的。擴展了一下:] –

1

您也可以考慮序列化到JSON,而不是XML,使用優秀JSON.NET庫,可以很容易地甚至序列化是最複雜的對象。 JSON非常緊湊,仍然可讀。

要序列:

string json = Newtonsoft.Json.JavaScriptConvert.SerializeObject(anySerializableObject); 

反序列化:

MyClass instance = (MyClass) Newtonsoft.Json.JavaScriptConvert.DeserializeObject(json, typeof(MyClass)); 
+0

這不是一個開源項目,並且有一個關閉源的許可:/ – Mech0z

+0

JSON.NET使用MIT許可授權。根據維基百科,「專有軟件保留其專有性質,即使它根據MIT許可合併了軟件」。 http://en.wikipedia.org/wiki/MIT_License –

0

如果你需要XML沒有XML聲明,你應該使用XmlWriterSettings。例如,當你需要XML字符串的節點,但不是整個XML文檔。

private static string SerializeToString(object objectToSerialize) 
{ 
    var serializer = new DataContractSerializer(objectToSerialize.GetType()); 
    var output = new StringBuilder(); 
    var xmlWriter = XmlWriter.Create(output, new XmlWriterSettings() { OmitXmlDeclaration = true}); 

    serializer.WriteObject(xmlWriter, objectToSerialize); 
    xmlWriter.Close(); 

    return output.ToString(); 
}