我在SQL Server中存储的int值为xml
类型,在C#中检索时为SqlXml
数据库中的值:
<int>1234</int>
如何将此值反序列化为值为int
的{{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);
}
}