在序列化为XML时序列化空白数组

时间:2013-06-18 21:07:38

标签: c# sql-server serialization

我正在尝试将两个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数组不存在。

1 个答案:

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