2014-09-26 4 views
1

У меня есть целочисленное значение, сохраненное в SQL Server, как xml типа, который SqlXml при извлечении в C#Deserialize от SQLXML объекта

значения в базе данных:

<int>1234</int> 

Как десериализации этого значения до int со значением 1234?

+0

Смотрите это [ссылка] (http://stackoverflow.com/questions/13562635/deserialize-xml-object-in-t-sql) – Rajesh

ответ

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