2013-06-18 4 views
0

Я пытаюсь сериализовать два возражения списка на SQL Server.Пустой массив, сериализованный при сериализации в XML

Это мой сериализации код:

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

Опубликовать свой собственный класс, но, скорее всего, это потому, что ваш пользовательский класс не помечен как сериализуемый. – cgotberg

+0

Добавлено. Желание было простым способом отладить это. – appsecguy

+1

Как в стороне, 'StringWriter' реализует интерфейс' IDisposable', поэтому весь ваш вызов и его использование должны быть завернуты в блок 'using'. –

ответ

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); 
    } 
} 
+0

Не знаете почему, но когда я удалил класс, построил, а затем вернул класс, он снова начал работать. Возможно, был какой-то остаток от другого кодового обезьян, который я делал с именованием модели EF, которое могло бы дать некоторую двусмысленность. Все хорошо сейчас :) – appsecguy

Смежные вопросы