0

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

4

1 回答 1

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);
    }
}
于 2013-06-18T21:34:06.697 回答