【发布时间】:2017-12-21 16:04:08
【问题描述】:
我知道为什么静态变量的序列化默认不起作用,但this question 的答案似乎表明使用正确的属性是可能的。
我的班级是这样的:
[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;
}
并通过
进入JSON.netStatePersister.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();
}
}
}
我已经尝试过使用和不使用 [JsonObject(MemberSerialization.OptIn)] 属性,无论哪种方式,我都会得到一个只包含“{}”的文件
单步执行代码我知道对象正在被实例化,并且它正在以正确的信息传递给正确的对象。
【问题讨论】:
-
为什么你还有静态属性?为什么不让它们变成非静态的呢?
-
出于同样的原因,任何人都使用静态变量。我们需要可以从代码中的任何地方访问的变量,永远不需要不止一次的实例,传递单个实例会很混乱,并且可能会为很多错误打开机会。从任何地方对这些属性所做的任何更改都需要在整个程序中同步。
标签: c# json serialization json.net