Json.NET 8.0.1を使用するようにコードベースをアップグレードした後、一部の逆シリアル化が失敗します。 Json.NET 7.0.1を使用するとすべて正常に動作します。明らかに、この問題の原因となるタイプbyte[]
のプロパティを逆シリアル化しています。 byte[]
プロパティを削除してもうまく動作します。Json.NET 8.0.1を使用してバイト配列プロパティを持つオブジェクトを逆シリアル化できません
internal class Program
{
private static void Main(string[] args)
{
Dictionary<string, Account> accounts;
var jsonSerializerSettings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Objects,
TypeNameAssemblyFormat = FormatterAssemblyStyle.Simple
};
using (var streamReader = new StreamReader("accounts.json"))
{
var json = streamReader.ReadToEnd();
accounts = JsonConvert.DeserializeObject<Dictionary<string, Account>>(json, jsonSerializerSettings);
}
foreach (var account in accounts)
{
Debug.WriteLine(account.Value.Name);
}
}
}
internal class Account
{
public string Id { get; set; }
public string Name { get; set; }
public byte[] EncryptedPassword { get; set; }
}
accounts.json
ファイルは次のようになります:
{
"$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[ConsoleApplication1.Account, ConsoleApplication1]], mscorlib",
"lars.michael": {
"$type": "ConsoleApplication1.Account, ConsoleApplication1",
"EncryptedPassword": {
"$type": "System.Byte[], mscorlib",
"$value": "cGFzc3dvcmQ="
},
"Name": "Lars Michael",
"Id": "lars.michael"
},
"john.doe": {
"$type": "ConsoleApplication1.Account, ConsoleApplication1",
"EncryptedPassword": {
"$type": "System.Byte[], mscorlib",
"$value": "cGFzc3dvcmQ="
},
"Name": "John Doe",
"Id": "john.doe"
}
}
はJson.NET 8.0.1でこの多分バグですか、私は多分これを解決することができ、私はこの単純なコンソールアプリケーションを使用して動作を再現することができますJsonSerializerSettings
を調整することで?
誰でもこれを再生しようとしている場合は、accounts.json
ファイルのアセンブリ名をコンソールアプリケーションのアセンブリ名(この場合はConsoleApplication1
)と同期させてください。変化
クール、確認と回避策については感謝して。私はGitHubの問題を報告しました。 –