我正在研究我的Xamarin Android应用程序中的增强功能,以便更轻松地使用Android的保存状态 . 实现的一部分需要Json序列化具有自定义 [SaveState]
属性的当前 Activity
类的属性 . 所有其他属性都将被忽略 . 我有这个机制使用POCO(和Json.NET作为序列化器) . 使用自定义 [SaveState]
属性定义公共属性时,它会根据需要序列化(仅)该属性 .
当我定义一个扩展(显然)必需 Activity
类的类时,我们称之为 ExampleActivity
,它不再序列化公共属性 . 因此,在扩展 Activity
时,为POCO工作的相同设置不再起作用 .
另外:它没有序列化 ExampleActivity
或继承的 Activity
属性的任何内容 . 即使很多都是公开的 . 只是一个空的Json字符串对象 .
当我将 [JsonProperty]
属性添加到公共属性时,它会这样做!所以我相信它_t73701_ t序列化属性,它只是赢了't. For some reason it' s忽略它和其他一切 .
我似乎弄明白为什么它为序列化器增加了一个 TraceWriter
,希望能看到一些可能指向正确方向的东西,但事实并非如此 .
我添加了一个小的剥离代码片段,可以重现这个问题:
public static class Example
{
public static void Run()
{
var exampleActivity = new ExampleActivity { PropertyA = "A value", PropertyB = "B value" };
// Default serializer settings with a memory trace writer
var serializerSettings = new JsonSerializerSettings { TraceWriter = new MemoryTraceWriter() };
var serializedString = JsonConvert.SerializeObject(exampleActivity, serializerSettings);
System.Diagnostics.Debug.WriteLine(serializerSettings.TraceWriter);
// NOTE: The serialized string only contains PropertyB
System.Diagnostics.Debug.WriteLine($"SerializedString: {serializedString}");
}
public class ExampleActivity : Activity
{
//[JsonProperty]
public string PropertyA { get; set; }
[JsonProperty]
public string PropertyB { get; set; }
}
}
当调用静态 Example.Run()
时,你会看到即使 ExampleActivity
的 PropertyA
是一个普通的公共 property ,它也没有被序列化 . 而具有 [JsonProperty]
属性的 PropertyB
被序列化 .
对于我的解决方案,我不想将 [JsonProperty]
属性添加到也获得自定义 [SaveState]
属性的每个属性 . 它对 [SaveState]
行为的使用有影响 .
我希望我在描述我的问题时已经足够完整了 . 有谁知道为什么扩展 Activity
的类的常规公共属性没有被序列化?和/或如何解决这个问题?