2014-09-26 132 views
1

我具有存储在SQL Server作为xml类型,这是一个int值SqlXml当在C#反序列化到对象

在数据库中的值检索到:

<int>1234</int> 

我怎样才能反序列化该值到价值1234int

+0

看到这个[链接](http://stackoverflow.com/questions/13562635/deserialize-xml-object-in-t-sql) – Rajesh 2014-09-26 07:59:45

回答

1

假设SqlXml对象包含问题中提到的确切内容,您可能需要使用以下辅助方法。应该适用于以这种方式序列化的任何类型,即使是复杂的对象。

static T GetValue<T>(SqlXml sqlXml) 
{ 
    T value; 

    // using System.Xml; 
    using (XmlReader xmlReader = sqlXml.CreateReader()) 
    { 
     // using System.Xml.Serialization; 
     XmlSerializer xmlSerializer = new XmlSerializer(typeof(T)); 
     value = (T) xmlSerializer.Deserialize(xmlReader); 
    } 

    return value; 
} 

实施例的情况下:

using (MemoryStream stream = new MemoryStream()) 
using (XmlWriter writer = new XmlTextWriter(stream, Encoding.ASCII)) 
{ 
    writer.WriteRaw("<int>123</int>"); 
    writer.Flush(); 

    stream.Seek(0, SeekOrigin.Begin); 

    using (XmlReader reader = new XmlTextReader(stream)) 
    { 
     SqlXml sqlXml = new SqlXml(reader); 

     int value = GetValue<Int32>(sqlXml); 

     Debug.Assert(123 == value); 
    } 
}