[]
通过以下方法可以控制插件的特定属性如果序列化到文件中,活字格中单元格会有两个保存逻辑:
精细的控制序列化过程可以达成以下目的:
注意:除特别情况下,开发者没必要精细控制属性的序列化。以避免带来不必要的复杂度和Bug。
活字格提供了以下方法控制属性的序列化
DefaultValueAttribute
如果属性标注了DefaultValueAttribute当属性值与DefaultValue一致时,这个属性不会保存到文档中, 也不无法在 JavaScript 代码获取属性的值。(这个属性在JavaScript代码中会获取到 undefined)
using GrapeCity.Forguncy.CellTypes;
using System.ComponentModel;
namespace MyPlugin
{
public class MyPluginCellType : CellType
{
[DefaultValue(10)]
public int MyProperty { get; set; } = 10;
}
}
JsonIgnore
如果属性标注了 JsonIgnoreAttribute ,属性值既不会被保存,也不能通过 JavaScript 获取。
using GrapeCity.Forguncy.CellTypes;
using Newtonsoft.Json;
namespace MyPlugin
{
public class MyPluginCellType : CellType
{
[JsonIgnore]
public int MyProperty { get; set; } = 10;
}
}
SaveJsonIgnore
如果属性标注了 SaveJsonIgnore ,属性值既不会被保存,但是能通过 JavaScript 代码获取。
using GrapeCity.Forguncy.CellTypes;
using GrapeCity.Forguncy.Plugin;
namespace MyPlugin
{
public class MyPluginCellType : CellType
{
[SaveJsonIgnore]
public int MyProperty { get; set; } = 10;
}
}
PageMetadataJsonIgnore
如果属性标注了 PageMetadataJsonIgnore,属性值会被保存,但是无法通关 JavaScript 代码获取。
using GrapeCity.Forguncy.CellTypes;
using GrapeCity.Forguncy.Plugin;
namespace MyPlugin
{
public class MyPluginCellType : CellType
{
[PageMetadataJsonIgnore]
public int MyProperty { get; set; } = 10;
}
}
ShouldSerializeXXXProperty 方法
如果在类中添加了 ShouldSerialize+属性名 方法,对应的属性是否保存和被JavaScript 代码获取,取决于这个方法的返回值,返回 True 则可以被保存或获取,否则则不行。此方法的返回值必须是bool。
实例代码中,如果 MyProperty 值为 10 或 20 时不会被保存。
using GrapeCity.Forguncy.CellTypes;
namespace MyPlugin
{
public class MyPluginCellType : CellType
{
public int MyProperty { get; set; } = 10;
public bool ShouldSerializeMyProperty()
{
return MyProperty != 10 || MyProperty != 20;
}
}
}