属性SetValue返回TargetParameterCountException

时间:2019-02-15 11:14:30

标签: c# exception reflection propertyinfo

TL; DR

我有一个Type r类XmlSerialize,它在TargetParameterCountException上抛出了一个prop.SetValue()


Type

从我的列表Types

中调用该类
[System.Xml.Serialization.XmlArrayItemAttribute("Type", IsNullable = false)]
public List<Type> Types { get; set; }

和类本身

[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class Type
{
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public int TypeCode { get; set; }

    [System.Xml.Serialization.XmlAttributeAttribute()]
    public int NumberOfUnits { get; set; }
    public bool ShouldSerializeNumberOfUnits() { return NumberOfUnits > 0; }
}

我的属性设置功能

发件人:Xerillio answer for "Insert values in class without explicit writing them"

这是为了自动生成包含所有子类的完整类以及演示数据。

public static void SetDefaults(object testObj)
{
    PropertyInfo[] propertyInfos = testObj.GetType().GetProperties();
    foreach (PropertyInfo propertyInfo in propertyInfos)
    {
        if (propertyInfo.Name == "Count" || propertyInfo.Name == "Capacity" || propertyInfo.SetMethod == null)
        {
            continue;
        }

        var propType = propertyInfo.PropertyType;
        if (propType == typeof(int))
        {
            // [...]
        }
        else
        {
            var ctor = propType.GetConstructor(Type.EmptyTypes);
            var propertyObject = ctor.Invoke(new object[0]);
            SetDefaults(propertyObject);
            propertyInfo.SetValue(testObj, propertyObject);
        }
    }
}

问题

现在,如果propertyObject被写入并准备通过propertyInfoTargetParameterCountException中进行设置,则可以。
可能与未设置的索引和计数属性有关,但STFW无法找到任何内容。

我是否需要在任何地方设置countindex属性,或者ShouldSerialize...变量是否有问题?

0 个答案:

没有答案