我正在尝试将两个List异议序列化为SQL Server。
这是我的序列化代码:
public static string SerializeToXml<T>(this T value)
{
var writer = new StringWriter(CultureInfo.InvariantCulture);
var serializer = new XmlSerializer(typeof(T));
serializer.Serialize(writer, value);
return writer.ToString();
}
当序列化并保存以下属性时,一切看起来都很好:
this.IPHostList = liveHostIps.SerializeToXml<List<string>>();
但是当我尝试使用自定义类时,我没有得到任何数据。
this.MyClassList = MyClassContainer.SerializeTpXml<List<MyClass>>();
作为我在数据库中看到失败项目的示例:
<ArrayOfMyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
我从成功项目中看到的一个例子:
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<string>192.168.1.4</string>
<string>192.168.1.5</string>
</ArrayOfString>
我尝试序列化为XML以便查看数据库中的数据,但如果需要,我可以转换为base64。
为什么我的自定义课程没有被保存?我的自定义类是:
[Serializable]
public class MyClass
{
public bool prop1{get;set;}
public Nullable<System.Guid> prop2 {get;set;}
public string prop3 {get;set;}
}
请注意,我没有遇到代码错误 - 只是存储在数据库中的xml数组不存在。
答案 0 :(得分:0)
我重现了你的代码并通过单元测试运行它,但它似乎正确序列化。这是我的整个代码。也许通过这看起来会有所帮助。暂停Assert.IsNotNull,你会发现序列化似乎得到了妥善处理。
using System;
[Serializable]
public class MyCustomClass
{
public bool prop1 { get; set; }
public Nullable<Guid> prop2 { get; set; }
public string prop3 { get; set; }
}
using System.Globalization;
using System.IO;
using System.Xml.Serialization;
public static class MySerializer
{
public static string SerializeToXml<T>(this T value)
{
var writer = new StringWriter(CultureInfo.InvariantCulture);
var serializer = new XmlSerializer(typeof(T));
serializer.Serialize(writer, value);
return writer.ToString();
}
}
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
var myCustomClasses = new List<MyCustomClass>();
myCustomClasses.Add(new MyCustomClass { prop1 = true, prop2 = Guid.NewGuid(), prop3 = "Testing" });
myCustomClasses.Add(new MyCustomClass { prop1 = true, prop2 = null, prop3 = "Testing2" });
var serialized = MySerializer.SerializeToXml(myCustomClasses);
Assert.IsNotNull(serialized);
}
}