在DataContract案例中,父类的KnownType可以用于其子类吗?

时间:2016-04-14 10:29:22

标签: wcf exception exception-handling datacontract known-types

我的多层项目中有一个类ExceptionDTO,它有一个方法LogException,它接受4个属性,其中一个是异常。 我已经制作了DataContract解析器来解析类的类型。

[DataContract]
[KnownType("GetKnownTypes")]
public class ExceptionDTO
{
    [DataMember]
    public string CenterCode { get; set; }
    [DataMember]
    public string userCode { get; set; }
    [DataMember]
    public string WindowCode { get; set; }
    [DataMember]
    public Exception Exception { get; set; }
    public static Type[] GetKnownTypes()
    {
        List<Type> result = new List<Type>();
        result.Add(typeof(Exception));
        result.Add(typeof(SystemException));
        result.Add(typeof(ApplicationException));
        result.Add(typeof(ArgumentException));
        result.Add(typeof(Dictionary<string, object>));
        result.Add(typeof(IDictionary).Assembly.GetType("System.Collections.ListDictionaryInternal"));
        return result.ToArray();
    }
}

我的问题是:如果我发送一些类型SystemException的异常,它会工作,但是如果我发送一个可以是IndexOutOfRangeException的SystemException的子代,它就不起作用。那么我可以做些什么来创造这种关系。

我收到此错误消息 - 尝试序列化参数http://tempuri.org/:ex时出错。 InnerException消息是'Type'System.NullReferenceException',不期望数据协定名称为'NullReferenceException:http://schemas.datacontract.org/2004/07/System'。考虑使用DataContractResolver或将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中。有关详细信息,请参阅InnerException。

发送异常的代码是

ExceptionDTO exp = new ExceptionDTO { CenterCode = "30134", Exception = new NullReferenceException(), userCode = "ss", WindowCode = "ss" };
Logger.LogException(exp);

   public static class Logger
{
    public static void LogException(ExceptionDTO exception) 
    {
        LogManagerServices.LogManagerClient _objLogManager = null;
        _objLogManager = new LogManagerServices.LogManagerClient();
        _objLogManager.LogException(exception);

    }
}

0 个答案:

没有答案