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的替代方案