1

我正在尝试使用从测试中获取的信息创建一个 xml 文档。基本上我是{get; set:}用来获取信息的,当我浏览程序时,你会看到文件信息在哪里传递,但我要么得到无法创建 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();
        }
    }
4

2 回答 2

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));
于 2013-04-08T15:04:48.830 回答
1

使用完整路径作为

Path.Combine(path, filename) 

不是相反。你的路径名原来是错误的

编辑:

您不能通过传递接口对象来序列化。您可以按照此链接链接中提供的方式修改您的代码

于 2013-04-08T13:11:57.233 回答