2013-04-08 3 views
0

Я пытаюсь создать документ xml с информацией, взятой из теста. В основном я использую {get; set:}, чтобы получить информацию, и когда я просматриваю программу, вы видите, где передается информация о файле, но я либо получаю сообщение об ошибке, которое невозможно создать XML-документ, либо оно создано, но пустое.Невозможно создать файл xml

Вот код:

public class XmlCreate 
    { 
     public string Types { set; get; } 
     public DateTime Time { get; set; } 
     public bool done{ get; set; } 


     public void SerializetoXml(IRepo repo) 
     {  
      var filename = string.Format("{0}__{1}", DateTime.Now.ToString("yyyyMMdd"), "Log.xml"); 
      var path = 
       @"C:\TestDocs\artifacts"; 
      if (!Directory.Exists(path)) 
       Directory.CreateDirectory(path); 
      var fullpath = Path.Combine(filename, path); 
      var serializer = new XmlSerializer((typeof(IRepo))); 
      var textwriter = new StreamWriter(filename); 
      serializer.Serialize(textwriter, repo); 
      textwriter.Close(); 
     } 
    } 
+1

Все ли классы, реализующие «IRepo», отмеченные атрибутом «Serializable»? Какую точную ошибку вы получаете? –

+0

Нет, я не могу, потому что это интерфейс. И ошибка, которую я получаю, заключается в том, что возникла ошибка при создании моего документа xml. – CSharpDev4Evr

+0

Для получения дополнительной информации ознакомьтесь с InnerException. Он часто расскажет вам, почему не удалось выполнить сериализацию XML. – RogerN

ответ

2

XML-сериализатор должен знать обо всех типах объектов будет сталкиваться раньше времени. Если вы все еще пытаетесь создать сериализатор, используя интерфейс вместо типа класса, это может быть частью проблемы; интерфейс не обязательно будет раскрывать все общедоступные свойства вашего объекта. В противном случае вам нужно убедиться, что любые типы, которые сериализатор XML не может автоматически вывести из ваших свойств (например, из-за полиморфизма), включены. Используйте атрибут XmlInclude на корневом объекте, чтобы сообщить сериализатору об этих типах. Пример:

// XmlInclude is necessary because our class doesn't explicitly mention derived object 
[XmlInclude(typeof(ObjectDerived))] 
class MyRootClass { 
    public ObjectBase { get; set; } 
} 
class ObjectBase { 
    // some properties here 
} 
class ObjectDerived : ObjectBase { 
    // more properties here 
} 
... 
var serializer = new XmlSerializer(typeof(MyRootClass)); 
1

Используйте полный путь в

Path.Combine(path, filename) 

не наоборот. ваше имя путь оказался неправильным

EDIT:

Вы не можете сериализовать, передавая объект интерфейса. Вы можете изменить свой код, как это предусмотрено в этом link или this

+0

Я до сих пор получаю сообщение об ошибке: «Был ошибка генерации XML-документа ". – CSharpDev4Evr