簡體   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