1

CRM の Web リソースに、いくつかの構成データを JSON として追加しました。C# プラグインでデシリアライズしようとすると、最初に Base 64 文字列をデコードし、次に UTF バイトをエンコードする必要があります。以前に CRM の外でこれを行ったことがあり、問題はありませんでしたが、引数例外「無効な JSON プリミティブ: .」が原因で JSON が逆シリアル化されていないときに、CRM でループが発生しました。

CRMにはUTFプリアンブルが含まれており、それは有効なJSONではないため、削除する必要があることが最終的にわかりました。以下は私の現在の解決策ですが、プリアンブルが何であるかを確認し、正しいエンコーディングを正しく適用して、プリアンブルなしで結果を返すバイトをエンコードする (またはデコードする) 標準的な方法があると思います。

private static Settings Deserialize(WebResource value) {
    if (value == null)
    {
        throw new ArgumentNullException("value");
    }

    // By Default, Content is stored in a Base64String with a UTF preamble.
    var content = Encoding.UTF8.GetString(Convert.FromBase64String(value.Content)); 
    var preamble = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble());

    if (content.StartsWith(preamble))
    {
        content = content.Remove(0, preamble.Length);
    }

    return new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<Settings>(content); 
}

確かにこれを行うためのより標準的な方法はありますか?

4

1 に答える 1