【问题标题】:Deserialize from SqlXml to object从 SqlXml 反序列化为对象
【发布时间】:2014-09-26 07:47:33
【问题描述】:

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

数据库中的值:

<int>1234</int>

如何将此值反序列化为具有值1234int

【问题讨论】:

标签: c# sql-server xml sqlxml


【解决方案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);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    • 2014-04-26
    • 2015-11-07
    • 1970-01-01
    • 2019-11-20
    • 2013-01-23
    • 1970-01-01
    相关资源
    最近更新 更多