从SqlXml反序列化为对象

时间:2014-09-26 07:47:34

标签: c# sql-server xml sqlxml

我在SQL Server中存储的int值为xml类型,在C#中检索时为SqlXml

数据库中的值:

<int>1234</int>

如何将此值反序列化为值为int的{​​{1}}?

1 个答案:

答案 0 :(得分: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);
    }
}