【发布时间】:2022-02-25 20:59:18
【问题描述】:
给定 3rd 方库中的变体样式类,编码如下:
enum VariantType
{
Type1,
Type2,
... etc
TypeN
}
class Variant
{
[SerializeField]
private VariantType _variantType;
public VariantType VariantType => _variantType;
[SerializeField] // Unity Serialization attribute
private Type1 _type1;
public Type1 Type1 => _type1;
... etc
[SerializeField] // Unity Serialization attribute
private TypeN _typeN;
public TypeN TypeN => _typeN;
}
有没有办法使用 JSON.Net 在序列化 Variant 时仅序列化 VariantType 标识的单个属性?
所以我们得到
{
"_variantType": "Type1",
"_type1": {...}
}
而不是(假设没有任何属性为空)
{
"_variantType": "Type1",
"_type1": {...}
...
"_typeN": {...}
}
我使用自定义 ContractResolver 和 CreateProperty 进行了调查,但似乎没有访问父对象的方法。
【问题讨论】:
-
我无法应用属性并且合同解析器不允许访问父对象,但也许使用 JSON 转换器可以解决问题。
-
当你说 I can't apply attributes 时你的意思是你不能应用 Json.NET 属性,或者你不能以任何方式改变类型
Variant,例如通过添加ShouldSerialize方法? -
没错。这是一个第 3 方 Unity 库。我还应该提到正在序列化字段而不是属性。
-
您应该将其添加到问题本身,这些是重要的限制条件。