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

时间:2017-08-06 13:27:28

标签: c# json serialization xamarin.ios realm

我需要将一个深度嵌套的RealmObject序列化为JSON,以便使用Xamarin和C#发布到web api。

原因是因为我不想让RealmObject属性继续存在,所以我真的在寻找一个可以序列化为JSON的POCO表示。我在Realm for Xamarin中找不到任何帮助方法,所以我猜我需要自己动手。

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

  1. 使用JSON.NET自定义ContractResolver。
  2. 在RealmObject上包含一个ToObject方法,该方法返回一个动态类型,然后我可以使用JsonConvert.SerializeObject序列化
  3. 使用JsonTextWriter迭代对象并手动创建相应的json。
  4. 目前我正在考虑选项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);
    

    有什么想法吗?

1 个答案:

答案 0 :(得分:4)

如果你不介意应用一些属性,那么一个更清洁的(在我看来)解决方案是使用带有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; }
}