当我尝试使用Contact
将数据序列化到服务器时,我有一个Realm
来自Xamarin.Forms
的{{1}}类。
但问题是,它正在将所有基类属性JsonConvert.SerializeObject
转换为JSON。作为第三方类,我对领域类没有任何控制权。
所以如何忽略模型中的整个Realm
类。
Realm
型号
Contact
答案 0 :(得分:3)
您可以在课程中使用JsonObject
属性,并将属性的序列化更改为选择加入:
[JsonObject(MemberSerialization.OptIn)]
public class Contact : RealmObject
{
[JsonProperty]
public string birthdate { set; get; }
[JsonProperty]
public string city { set; get; }
[JsonProperty]
[PrimaryKey]
public string contactId { set; get; }
[JsonProperty]
public string country { set; get; }
}
这样,只有具有JsonProperty
属性的属性才会被序列化。
注意:您也可以使用DataContract
代替JsonObject
和DataMember
代替JsonProperty
。它们与Json.NET以相同的方式工作。
ContractResolver
使用自定义ContractResolver
(编写更多代码)可以获得相同的结果:
public class MyContractResolver : DefaultContractResolver
{
public new static readonly MyContractResolver Instance = new MyContractResolver();
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
JsonProperty property = base.CreateProperty(member, memberSerialization);
if (property.DeclaringType == typeof(RealmObject))
{
property.ShouldSerialize = o => false;
}
return property;
}
}
请记住在序列化时将其分配给序列化程序:
JsonConvert.SerializeObject(
contact,
Formatting.Indented,
new JsonSerializerSettings { ContractResolver = MyContractResolver.Instance });