如何在Realm for Xamarin中将RealmObject序列化为JSON?

Cli*_*ead 1 c# serialization json realm xamarin.ios

我需要使用Xamarin和C#将深度嵌套的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);
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

Nik*_*hev 6

如果您不介意应用一些属性,则更干净的解决方案(在我看来)是将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; }
}
Run Code Online (Sandbox Code Playgroud)