繁体   English   中英

序列化对象以进行SHA1加密时出现DataContractSerializer错误

[英]DataContractSerializer error when serializing a object for SHA1 encryption

我正在尝试使用SHA1加密许多第三方类对象。 这些类对象正在从服务引用中使用,并且不受我管理。 虽然可以在“服务参考”中查看和查看代码,但是无法更改代码。

一种要求是在通过SOAP发送这些类对象之前计算SHA1哈希。 为此,我目前正在使用http://alexmg.com/compute-any-hash-for-any-object-in-c/中的对象扩展。

但是,当我尝试使用computerHash<T>方法中的DataContractSerializer序列化这些类之一时,出现以下错误。 但是,我可以使用XmlSerializer将同一类序列化为XML文档,而不会遇到任何麻烦。

键入“ [namespace]。[class]。[method]”,其数据协定名称为“ [method]: http//schemas.datacontract.org/2004/07/ [namespace]。[class ] ”不是必需的。 考虑使用DataContractResolver或将任何静态未知的类型添加到已知类型的列表中-例如,通过使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型的列表中。

任何有关使它起作用的指导将不胜感激。

我发现这个 StackOverflow的岗位从若干年前害得我到老的博客文章 ,并试图通过实现从博客解决方案1 NetDataContractSerializer而不是DataContractSerializer 现在,该代码似乎可以正常工作而不会引发任何异常。

private static byte[] computeHash<T>(object instance, T cryptoServiceProvider) where T : HashAlgorithm, new()
{
    // Original Code using DataContractSerializer throws an Exception.
    //DataContractSerializer serializer = new DataContractSerializer(instance.GetType());

    // Use the following instead of the above in order to avoid Exception being thrown.
    NetDataContractSerializer serializer = new NetDataContractSerializer();

    using (MemoryStream memoryStream = new MemoryStream())
    {
        serializer.WriteObject(memoryStream, instance);
        cryptoServiceProvider.ComputeHash(memoryStream.ToArray());
        return cryptoServiceProvider.Hash;
    }
}

暂无
暂无

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

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