我想生成一个示例xml,所以我编写了一个单元测试,其中我使用moq创建了一个对象。我试着像这样序列化它:
private AssetDescription GetAssetDescription(string description, string type, string name, string iconUrl)
{
var asstDesp = new Mock<AssetDescription>(type);
asstDesp.Setup(m => m.Description).Returns(description);
asstDesp.Setup(m => m.Type).Returns(type);
asstDesp.Setup(m => m.Name).Returns(name);
asstDesp.Setup(m => m.IconUrl).Returns(iconUrl);
return asstDesp.Object;
}
注意:此处AssetDescription
是这样的类:
[DataContract]
public class AssetDescription
{
[DataMember]
public virtual string Type { get; set; }
[DataMember]
public virtual string Name { get; set; }
[DataMember]
public virtual string Description { get; set; }
[DataMember]
public virtual string IconUrl { get; set; }
public AssetDescription(string type)
{
Type = type;
}
public AssetDescription()
{
// I have added a parameter less constructor to xml serialization.
}
}
XML序列化方法:
public string SerializeObject(object obj)
{
var xmlDoc = new XmlDocument();
var serializer = new XmlSerializer(obj.GetType());
using (var ms = new MemoryStream())
{
serializer.Serialize(ms, obj);
ms.Position = 0;
xmlDoc.Load(ms);
return xmlDoc.InnerXml;
}
}
现在我可以像这样成功地序列化AssetDescription
:
var ds = GetAssetDescription("Description1", "type1", "name1", "iconurl1");
var dsxml = SerializeObject(ds);
问题:AssetDescription
是列表的一部分,该列表是我使用moq创建该对象的其他对象的一部分。经过一些测试后我对此进行了细分: -
我无法序列化AssetDescription
列表,但是它会抛出错误。
这是我的列表创建方法:
private List<AssetDescription> GetListAssetDescriptions()
{
var lst = new List<AssetDescription>
{
GetAssetDescription("Description1", "type1", "name1", "iconurl1"),
GetAssetDescription("Description2", "type2", "name2", "iconurl2"),
GetAssetDescription("Description3", "type3", "name3", "iconurl3"),
GetAssetDescription("Description4", "type4", "name4", "iconurl4")
};
return lst;
}
我试着像这样序列化它:
var fgh = GetListAssetDescriptions();
var fghd = SerializeObject(fgh);
但发生此错误:
生成XML文档时出错
问题:
我可以从模拟对象生成xml吗?
如果是,那么有人知道如何解决这个错误吗?
答案 0 :(得分:1)
不是答案,但我对这个问题感到困惑。我来问你几个问题:
AssetDescription
是POCO,而不是界面。就你的代码而言,这个类没有做任何事情。 为什么你不能只创建一个真实的对象,而不是模拟? 模拟仅用于测试。在向非测试项目添加Moq
引用之前,必须要认真思考。模拟具有相当复杂的内部结构 - 它们被设计成伪装成它们不是的东西。 XML序列化不是这些人的设计的一部分,所以毫不奇怪你不能将mock序列化为XML。我会走得那么远,说没有解决方法。因为模拟不能被序列化。