我有一个使用JsonConvert.DeserializeObject反序列化的类。在那个对象中,我已经有了以下内容:
public string Name { get; private set; }
public uint TotalFrames { get; private set; }
public string AttachedDetachBoneId { get; private set; }
public string StartingBone { get; set; }
public uint SyncFrame { get; private set; }
public uint CycleFrames { get; private set; }
public uint AttachDetachFrame { get; private set; }
这些都从从文件读取的字符串数据中成功反序列化。然后我添加了以下内容:
public bool ForceAttachedObjectToGround { get; private set; } = true;
不进行反序列化。我测试了几个不同的案例并得到了以下结果:
基于此,我想也许属性类型在某种程度上是问题,并添加了三种不同类型的新测试属性:
public bool BoolTest { get; private set; }
public uint UintTest { get; private set; }
public string StrTest { get; private set; }
这些也没有被反序列化,除非我公开了setter或添加了JsonProperty
。如果我然后删除属性/再次将属性设为私有,则反序列化将再次停止工作。
这里发生了什么? Json.Net如何决定反序列化和不反传?
为了完整起见,我确实指定了自己的JsonSerializerSettings。我有
TypeNameHandling = TypeNameHandling.Objects
,我指定了一个自定义活页夹。但是在这种情况下不使用活页夹。
答案 0 :(得分:0)
在这种情况下,(非常明显的)答案是序列化行为是从类实现的接口继承的。:
public interface IAnimationData
{
[JsonProperty]
string Name { get; }
[JsonProperty]
uint TotalFrames { get; }
// etc..
}
public class AnimationData :
IAnimationData
{
public string Name { get; private set; }
public uint TotalFrames { get; private set; }
// etc
}