C# 从模拟对象列表创建xml时出错

C# 从模拟对象列表创建xml时出错,c#,asp.net,xml,unit-testing,serialization,C#,Asp.net,Xml,Unit Testing,Serialization,我想生成一个示例xml,所以我编写了一个单元测试,其中我使用moq创建了一个对象。我试着像这样序列化它: private AssetDescription GetAssetDescription(string description, string type, string name, string iconUrl) { var asstDesp = new Mock<AssetDescription>(type); asstDesp.Setup(m

我想生成一个示例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;
}
[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.
    }
}
var fgh = GetListAssetDescriptions();           
var fghd = SerializeObject(fgh);
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);
问题
资产描述
是列表的一部分,该列表是我使用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;
}
但出现这种错误:

生成XML文档时出错

问题:

  • 我可以从模拟对象生成xml吗

  • 如果是,那么有人知道如何解决这个错误吗


  • 没有答案,但我对这个问题感到困惑。让我问你几个问题:

  • 你为什么要在那里开玩笑<代码>资产描述是一个POCO,而不是一个接口。就您的代码而言,这个类不做任何事情为什么不能创建一个真实的对象,而不是模拟对象
  • 如果您需要mock,那么序列化为xml的目的是什么?你以后用它做什么

  • 模拟仅用于测试。在将
    Moq
    引用添加到非测试项目之前,必须认真考虑。模拟具有相当复杂的内部结构——它们被设计成假装它们不是的东西。XML序列化并不是这些人设计的一部分,所以不能将mock序列化为XML也就不足为奇了。我要说的是,没有解决这个问题的办法。因为mock不能序列化。

    我得到了这些Poco类,其中一些属性没有公共setter,我想使用这些类生成一个示例xml(AssetDescription是类的一部分)。所以我决定对它们进行模拟,并制作一个示例xml。所以我遇到了这个问题。之后,我公开了他们的属性设置器,并生成了一个xml。xml的用途:-我将从我的服务器获取一个xml,但现在无法发出请求。非常感谢您的努力。好的,您很怀念使用mock。模拟不能序列化,只能用于单元测试。您必须想出另一种创建xml的方法(继承
    AssetDescription
    和“禁用”有问题的函数??)