2011-12-02 68 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(); 
} 
相关问题