逆シリアル化したいオブジェクトがあります。これは外部ライブラリで構造体として宣言されています (Serializable としてマークされています)。しかし、Json.net はこのオブジェクトを逆シリアル化できません。シリアル化は問題ありませんが、逆シリアル化は機能しません。すでに構造体をクラスに変更しようとしましたが、役に立ちませんでした。JsonSerializerSettings などに何か特別なものを入れる必要がありますか、それともサポートされていませんか? TypeNameHandling や TypeNameAssemblyFormat など、いくつかのパラメーターを既に試しましたが、うまくいきませんでした。
尋ねられたように、いくつかのコード、これは外部ライブラリで宣言されています:
[Serializable]
public struct BarEntry
{
public RegistryValueKind One;
public string Two;
public string Three;
public string Four;
public object Five;
}
[Serializable]
public struct FooEntry
{
public string One;
public string Two;
}
独自のプロジェクトで次のように連載:
Stream stream = System.IO.File.Open(fileName, FileMode.Create);
string json = JsonConvert.SerializeObject(entry, Formatting.None, new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Objects });
StreamWriter streamWriter = new StreamWriter(stream);
streamWriter.Write(json);
streamWriter.Flush();
stream.Close();
独自のプロジェクトで次のように逆シリアル化されます。
StreamReader streamReader = new StreamReader(input);
string json = streamReader.ReadToEnd();
object returnObject = JsonConvert.DeserializeObject<T>(json);
input.Close();
return returnObject;
独自のプロジェクト内のすべてがこのコードで正常に動作しますが、外部ライブラリからはオブジェクトを逆シリアル化できません (BarEntry と FooEntry の両方から)。
また、BarEntry と FooEntry は両方とも、ストレージ オブジェクトの同じプロパティに格納されます。
public object Entry { get; set; }