逆シリアル化したいオブジェクトがありますが、これは外部ライブラリ(Serializableとしてマークされています)で構造体として宣言されています。シリアル化は正常ですが、デシリアライズは機能しません。私はすでに構造体をクラスに変更しようとしましたが、それは役に立ちませんでした。 JsonSerializerSettingsなどの何かを特別なものにする必要がありますか、それともサポートされていませんか? TypeNameHandlingやTypeNameAssemblyFormatのように、すでにいくつかのパラメータを試してみましたが、うまくいきませんでした。外部ライブラリで宣言された構造体でオブジェクトを逆シリアル化します
いくつかのコードは、尋ねたとおり、これは外部のライブラリ内で宣言されています
として、独自のプロジェクトにデシリアライズ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;
など独自のプロジェクトで連載
[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;
}
自分のプロジェクトの中のすべてがこのコードでうまく動作しますが、外部ライブラリからはそれを捨てることはできません(BarEntryとFooEntryの両方から)オブジェクトをializeします。
またBarEntryとFooEntryは両方彼らのストレージ・オブジェクトに同じプロパティに格納されています。
public object Entry { get; set; }
いくつかのコードを、してください! –
追加されました、編集された開始ポストを確認してください;) –
そして、あなたが「うまくいかない」と言うと、実際に何が起こるのですか? –