如何在序列化realmObject时忽略ObjectSchema和Ream属性

时间:2018-03-12 18:23:40

标签: c# uwp realm

我试图在我的uwp项目中序列化RealmObject,我想知道在序列化realmObject时是否有任何方法可以忽略ObjectSchema和Ream属性?我试图创建一个constuctor以避免复制这两个属性,但它对我没用。

这是我的目标:

public class Sector : RealmObject, NodeBase
{
    [PrimaryKey]
    public int id { get; set; }
    public string key { get; set; }
    [Ignored]
    public Dictionary<string, string> title { get; set; }
    [JsonIgnore]
    public Dictionary Title { get; set; }
    public int position { get; set; }
    public bool template_is_carousel { get; set; }
    public bool isVisible { get; set; }
    public IList<string> filter { get; }
    [Ignored]
    public DisplayType display_type { get; set; }
    [JsonIgnore]
    public string DisplayType { get; set; }
    public int parent_id { get; set; }
    public string parent_type { get; set; }
    public string image_url { get; set; }
    public string banner_color { get; set; }
    public int template_rows { get; set; } = 3;
    public int template_columns { get; set; } = 2;

    public Sector(Sector sector)
    {
        this.id = sector.id;
        this.key = sector.key;
        this.Title = sector.Title;
        this.title = sector.title;
        this.position = sector.position;
        this.template_is_carousel = sector.template_is_carousel;
        this.isVisible = sector.isVisible;
        this.filter = sector.filter;
        this.display_type = sector.display_type;
        this.DisplayType = sector.DisplayType;
        this.parent_id = sector.parent_id;
        this.parent_type = sector.parent_type;
        this.image_url = sector.image_url;
        this.banner_color = sector.banner_color;
        this.template_rows = sector.template_rows;
        this.template_columns = sector.template_columns;
    }

    public Sector()
    {
    }
}

这就是我序列化对象的方式:

private string serializeParameter(object parameter)
    {
         return JsonConvert.SerializeObject(parameter); 
    }

1 个答案:

答案 0 :(得分:0)

Json.NET中的序列化将默认序列化基类属性。 Sector类继承自RealmObject类,然后在序列化Sector对象时,父类RealmObject中的所有基本属性都将被序列化。

要解决此问题,您可以尝试使用[JsonObject(MemberSerialization.OptIn)]属性,在这种情况下,不指定[JsonProperty]的属性将不会被序列化。例如,以下代码仅序列化parent_type属性

[JsonObject(MemberSerialization.OptIn)]
public class Sector : RealmObject
{
    [JsonProperty]
    public string parent_type { get; set; } 
}

实际上,简单的方法是为父类中的属性添加[JsonIgnore]属性。但看起来您使用的第三个包无法更改父类RealmObject

更多细节请参考 this thread

要根据您的要求使用哪种方式,您还可以尝试按Json relative APIs in UWP app序列化,而不使用Json.Net。例如:

 var jsonstring= Stringify();

 public string Stringify()
 { 
     JsonObject jsonObject = new JsonObject();
     jsonObject["parent_type "] = JsonValue.CreateStringValue("test"); 
     return jsonObject.Stringify();
 }