C# 在序列化类时排除基类领域
我有一个类C# 在序列化类时排除基类领域,c#,xamarin,realm,C#,Xamarin,Realm,我有一个类Contact,它来自Xamarin.Forms中的Realm,现在我正试图使用JsonConvert.SerializeObject将数据发送到服务器 但问题是,它正在将其所有基类属性Realm转换为JSON。我对realm类没有任何控制权,因为它是第三方类 那么,我怎样才能从我的模型中忽略整个领域类呢 联系人型号 public class Contact : RealmObject { public string birthdate { set; get;
Contact
,它来自Xamarin.Forms
中的Realm
,现在我正试图使用JsonConvert.SerializeObject
将数据发送到服务器
但问题是,它正在将其所有基类属性Realm
转换为JSON。我对realm类没有任何控制权,因为它是第三方类
那么,我怎样才能从我的模型中忽略整个领域
类呢
联系人
型号
public class Contact : RealmObject
{
public string birthdate { set; get; }
public string city { set; get; }
[PrimaryKey]
public string contactId { set; get; }
public string country { set; get; }
}
您可以在类上使用
JsonObject
属性,并将属性的序列化更改为opt-in:
[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
(编写更多的代码)获得相同的结果:
序列化时请记住将其分配给序列化程序:
JsonConvert.SerializeObject(
contact,
Formatting.Indented,
new JsonSerializerSettings { ContractResolver = MyContractResolver.Instance });
您可以在类上使用
JsonObject
属性,并将属性的序列化更改为opt-in:
[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
(编写更多的代码)获得相同的结果:
序列化时请记住将其分配给序列化程序:
JsonConvert.SerializeObject(
contact,
Formatting.Indented,
new JsonSerializerSettings { ContractResolver = MyContractResolver.Instance });
你有什么例子可以使用<代码> DATACORATS< /COD>吗?我可以简单地考虑联系类,而不是用opt in序列化来标记每个字段。如果无法访问基础,则必须装饰单个属性class@Hunt使用自定义的CurrestReleVeldO添加了一个替代方案。你可以使用任何例子来使用<代码> DATACONTRONU/COD>。我可以简单地考虑接触类,而不是用opt in序列化来标记每个字段。如果无法访问基础,则必须装饰单个属性class@Hunt添加了使用自定义ContractResolver的替代方案