【问题标题】:How can I serialize a RealmObject to JSON in Realm for Xamarin?如何在 Realm for Xamarin 中将 RealmObject 序列化为 JSON?
【发布时间】:2017-08-06 13:27:28
【问题描述】:

我需要使用带有 C# 的 Xamarin 将深度嵌套的 RealmObject 序列化为 JSON 以发布到 Web api。

这样做的原因是因为我不希望 RealmObject 属性继承,所以我真的在寻找可以序列化为 JSON 的 POCO 表示。我在 Realm 中找不到任何帮助 Xamarin 执行此操作的方法,所以我猜我需要自己动手。

我正在考虑几个选项,并希望得到一些反馈:

  1. 使用 JSON.NET 自定义 ContractResolver。
  2. 在 RealmObject 上包含一个 ToObject 方法,该方法返回一个动态类型,然后我可以使用 JsonConvert.SerializeObject 对其进行序列化
  3. 使用JsonTextWriter对对象进行迭代,手动创建对应的json。

目前我正在研究选项 2,因为它非常简单,例如

public class Person:RealmObject {
    public string FirstName {get;set;}
    public string LastName {get;set;}
    public IList<Dog> Dogs {get;set;}

    public dynamic ToObject(){
        return new {FirstName,LastName, Dogs = Dogs.Select(x => x.ToObject())};
  }
}

public class Dog {
    public string Name;

    public dynamic ToObject(){
      return new {Name};
    }
}

var person = new Person(){...}
var json = JsonConvert.SerializeObject(person.ToObject());
var content = new StringContent(json);
var response = await client.PostAsync(url, content);

有什么想法吗?

【问题讨论】:

标签: c# json serialization xamarin.ios realm


【解决方案1】:

如果您不介意应用一些属性,更简洁(在我看来)的解决方案是使用 JsonObject 属性和 MemberSerialization.OptIn 参数:

[JsonObject(MemberSerialization.OptIn)] // Only properties marked [JsonProperty] will be serialized
public class Person : RealmObject
{
    [JsonProperty]
    public string FirstName { get; set; }

    [JsonProperty]
    public string LastName { get; set; }

    [JsonProperty]
    public IList<Dog> Dogs { get; set; }
}

【讨论】:

  • 感谢您 - 我已阅读文档但错过了这一点。好多了!
猜你喜欢
  • 2015-03-10
  • 1970-01-01
  • 1970-01-01
  • 2017-03-29
  • 2016-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-02
相关资源
最近更新 更多