静的変数のシリアル化がデフォルトで機能しないのはなぜですか?this questionへの回答は、正しい属性で可能であることを示しているようです。JSON静的プロパティシリアル化が機能しない
私のクラスには、次のようになります。
[JsonObject(MemberSerialization.OptIn)]
public class c
{
[JsonProperty]
public static double x{ get; set; } = 70;
[JsonProperty]
public static double y{ get; set; } = 36;
[JsonProperty]
public static double z{ get; set; } = 12;
}
そして、それは私が[JsonObject(MemberSerialization.OptIn)]属性でとせずに、それを試してみた
StatePersister.SaveState(new c(), fileName);
public static void SaveState(Object o, string savePath, FileFormat? format = null)
{
DataContractJsonSerializerSettings settings = new DataContractJsonSerializerSettings { UseSimpleDictionaryFormat = true };
DataContractJsonSerializer serializer = new DataContractJsonSerializer(o.GetType(), settings);
using (var stream = File.Create(savePath))
{
using (var writer = JsonReaderWriterFactory.CreateJsonWriter(stream, Encoding.UTF8, true, true, "\t"))
{
serializer.WriteObject(writer, o);
writer.Flush();
}
}
}
を通じてJSON.netに入り、いずれかの方法で「{}」だけを含むファイルを取得します
コードを実行するオブジェクトがインスタンス化されていることがわかりました。正しい情報。
なぜあなたはとにかく静的なプロパティを持っていますか?代わりにそれらを非静的にしてみませんか? –
誰もが静的変数を使用する同じ種類の理由から。コード内のどこからでもアクセス可能な変数が必要です。複数のインスタンスを持つ必要はありません。単一のインスタンスを渡すことは面倒であり、多くのエラーの可能性を開く可能性があります。どこからでも作成されたこれらのプロパティの変更は、プログラム全体で同期させる必要があります。 – ccwscott