繁体   English   中英

如何序列化为XML通用类?

[英]How to serialize to XML generic classes?

我有这些接口:

public interface IParameter
{
    string Name { get; }
    object UntypedValue { get; set; }
}
public interface IValidationPolicy<T>
{
    bool Validate(T toValidate);
    T Default();
}

参数基类

[Serializable]
public abstract class ParameterBase : IParameter
{
    public abstract string Name { get; protected set; }
    public abstract object UntypedValue { get; set; }
}

参数具体类(我还有更多,但它们非常相似):

public class Parameter<T, V> : ParameterBase where V : IValidationPolicy<T>
{
    [XmlAttribute("Name")]
    public override string Name { get; protected set; }

    [XmlIgnore]
    protected V validation_policy_;
    [XmlElement("AnyValidation", Type = typeof(AnyValidation<>))]
    [XmlElement("MultiOptionsValidation", Type = typeof(MultiOptionsValidation<>))]
    [XmlElement("RangeValidation", Type = typeof(RangeValidation<>))]
    [XmlElement("TextValidation", Type = typeof(TextValidation))]
    public V Validation
    {
        get
        {
            return validation_policy_;
        }
    }

    [XmlIgnore]
    protected T value_;
    [XmlElement("Value")]
    public T Value
    {
        get
        {
            return value_;
        }
        set
        {
            if (validation_policy_.Validate(value))
            {
                value_ = value;
            }
        }
    }

    [XmlIgnore]
    public object UntypedValue
    {
        get
        {
            return Value;
        }
        set
        {
            throw new NotImplementedException();
        }
    }
}

还有一个XMLParameter类:

public class XMLParameter : INotifyPropertyChanged
{        
    public string Description { get; set; }
    public int PasswordLevel { get; set; }
    public bool Enabled { get; set; }
    public ParameterBase Parameter { get; set; }
}

如何序列化和反序列化XMLParameters列表?

特别是我在序列化IParameter对象时遇到问题。

由于该接口在首次尝试时无法序列化,因此我创建了一个基本抽象类ParameterBase并从中派生Parameter 但是,当我尝试以测试方法将其序列化时:

var validation = new RangeValidation<int>() { MinValue = 1, MaxValue = 6 };
var parameter = new Parameter<int, RangeValidation<int>>();
parameter.Initialize("NumberOfTrays", validation);
parameter.Value = 6;

XElement par = validation.ToXElement<Parameter<int, RangeValidation<int>>>();

我有一个例外:类型'ConfigurableLibray.Parameter'2[System.Int32,ConfigurableLibray.RangeValidation'1[System.Int32]]'反射错误

内部异常表明不支持ConfigurableLibray.Parameter'2[T,V]

我究竟做错了什么?

预先感谢您的任何建议!

我解决了使用反射手动实现类的序列化和反序列化的问题。

暂无
暂无

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

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