【发布时间】:2017-08-06 13:27:28
【问题描述】:
我需要使用带有 C# 的 Xamarin 将深度嵌套的 RealmObject 序列化为 JSON 以发布到 Web api。
这样做的原因是因为我不希望 RealmObject 属性继承,所以我真的在寻找可以序列化为 JSON 的 POCO 表示。我在 Realm 中找不到任何帮助 Xamarin 执行此操作的方法,所以我猜我需要自己动手。
我正在考虑几个选项,并希望得到一些反馈:
- 使用 JSON.NET 自定义 ContractResolver。
- 在 RealmObject 上包含一个 ToObject 方法,该方法返回一个动态类型,然后我可以使用 JsonConvert.SerializeObject 对其进行序列化
- 使用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);
有什么想法吗?
【问题讨论】:
-
由于您已经在使用 Json.NET,我认为您可以使用 How can you prevent serialization of DependencyObjectType info on DependencyObjects using Newtonsoft JSON? 中的任何一个答案来抑制
RealmObject或其基础的所有属性的序列化序列化派生类型时的类型。 -
特别是来自here 的
IgnoreTypePropertiesContractResolver<RealmObject>似乎应该自动执行您需要的操作。
标签: c# json serialization xamarin.ios realm