繁体   English   中英

生成带有C#类中填充值的模拟XML的工具

[英]Tool to Generate Mock XML With Filled in Values From C# Class

有时在使用遗留代码时,我会得到巨大的对象,我需要进行模拟才能通过应用程序……具有200个属性的对象

除了可以手动构建对象之外,还有一种方法可以从C#类中生成一个填充值的模拟xml对象? 例如:

public Class Animal
{
    public bool hasWings {get; set;}
    public string name {get; set;}
    public int numberOfFeet {get; set;}
}

会变成:

<Animal>
  <hasWings>true</hasWings>
  <name>string</name>
  <numberOfFeet>0</numberOfFeet>
</Animal>

我不需要实际的实际价值...只是占位符

谢谢!

您可以使用以下方法来完成工作。 这将创建一个默认填充值的对象: 更新:添加了递归调用以处理类类型的属性

private static object GetDummyObject(Type type)
{
    var obj = Activator.CreateInstance(type);
    if (obj != null)
    {
        var properties = obj.GetType().GetProperties(BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public);

        foreach (var property in properties)
        {
            if (property.PropertyType == typeof(String))
            {
                property.SetValue(obj, property.Name.ToString(), null);
            }
            else if (property.PropertyType.IsArray)
            {
                property.SetValue(obj, Array.CreateInstance(type.GetElementType(), 0), null);
            }
            else if (property.PropertyType.IsClass)
            {
                var ob = GetDummyObject(property.PropertyType);
                property.SetValue(obj, ob, null);
            }
            else
            {
                var o = GetDefault(property.PropertyType);
                property.SetValue(obj, o, null);
            }
        }
    }

    return obj;
}

public static object GetDefault(Type type)
{
    return Activator.CreateInstance(type);
}

有一些限制。 这只会为默认构造函数生成对象,但您始终可以对其进行扩展。

现在,如果您需要XML,则只需序列化此方法返回的对象即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM