【发布时间】:2015-11-07 15:20:40
【问题描述】:
我有以下课程:
public class TriGrid
{
private List<HexTile> _hexes;
//other private fields...
//other public proprerties
}
我的目标是只序列化 _hexes 字段,所以我创建了以下 ContractResolver:
internal class TriGridContractResolver : DefaultContractResolver
{
protected override List<MemberInfo> GetSerializableMembers(Type objectType)
{
return new List<MemberInfo> { objectType.GetMember("_hexes", BindingFlags.NonPublic | BindingFlags.Instance)[0] };
}
}
当我想序列化 TriGrid 的实例时,我会这样做:
var settings = new JsonSerializerSettings()
{
ContractResolver = new TriGridContractResolver()
};
var json = JsonConvert.SerializeObject(someTriGrid, settings);
string strintJson = json.ToString();
但是当我检查strintJson 的值时,总是"{}"。 _hexes 有元素,它不是空的。如果我序列化一个特定的HexTile,它会按预期工作。我在这里做错了什么?
【问题讨论】:
-
@Ilya 您的第一个 SO 链接的答案,从外观上看,序列化所有私有字段,我只想特别序列化一个字段,您的第二个 SO 链接的答案使用 CreateProperties ,但我想要序列化的是一个字段,而不是一个属性。
标签: c# serialization json.net