.NET フレームワークにある XMLSerializer を使用してシリアル化するオブジェクトの HMAC を生成する必要があります。各オブジェクトには、オブジェクトの値自体のハッシュを含む「HMAC」と呼ばれるプロパティが含まれますが、「HMAC」フィールドは除外されます。CLR内の組み込みソリューションについて言及しているこの質問を見つけましたが、それが何と呼ばれているか、またはどのように使用するかについて正確には詳しく説明していませんか?
サンプル オブジェクトは次のようになります。
[Serializable]
[XmlRoot("request", IsNullable = false)]
public class Request
{
[XmlElement(ElementName = "hmac")]
public string Hmac { get; set; }
[XmlElement(ElementName = "nonce")]
public string Nonce { get; set; }
[XmlElement(ElementName = "expiration")]
public DateTime Expiration { get; set; }
/* A bunch of other properties to be serialized */
private Request() { }
public Request(string hmac, string nonce, DateTime expiration)
{
Hmac = hmac;
Nonce = nonce;
Expiration = expiration;
}
}
HMAC プロパティは、HMAC オブジェクト自体を除く、オブジェクト全体のシリアル化として設定する必要があります。私が最初に考えたのは、ある種の 2 パスのシリアライゼーションを設定することです。
- 最初のパスで xmlignore プロパティを HMAC オブジェクトに設定する
- オブジェクト全体のシリアル化
- 結果をハッシュし、HMAC プロパティの値を設定する
- 全体を再シリアル化して、送信の準備をします。
これが最善の方法ですか?誰かが以前にこのようなことをしたことがありますか? そして、それを行う最もクリーンな方法であることがわかりましたか?