Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将RealmObject序列化为Xamarin领域中的JSON?_C#_Json_Serialization_Xamarin.ios_Realm - Fatal编程技术网

C# 如何将RealmObject序列化为Xamarin领域中的JSON?

C# 如何将RealmObject序列化为Xamarin领域中的JSON?,c#,json,serialization,xamarin.ios,realm,C#,Json,Serialization,Xamarin.ios,Realm,我需要将深度嵌套的RealmObject序列化为JSON,以便使用Xamarin和C将其发布到web api 这是因为我不希望RealmObject属性继续存在,所以我正在寻找一种可以序列化为JSON的POCO表示。我在领域中找不到任何帮助器方法可以让Xamarin实现这一点,所以我猜我需要使用自己的方法 我正在考虑一些选择,并希望得到一些反馈: 使用JSON.NET自定义ContractResolver。 在RealmObject上包含一个ToObject方法,该方法返回一个动态类型,然后可以

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

这是因为我不希望RealmObject属性继续存在,所以我正在寻找一种可以序列化为JSON的POCO表示。我在领域中找不到任何帮助器方法可以让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);

有什么想法吗?

如果您不介意应用一些属性,我心目中一个更清晰的解决方案是将该属性与参数一起使用:

[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; }
}

如果您不介意应用一些属性,我心目中一个更清晰的解决方案是使用带有参数的属性:

[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; }
}

由于您已经在使用Json.NET,我认为在序列化派生类型时,您可以使用中的任一答案来抑制RealmObject或其基类型的所有属性的序列化。特别是IgnoreTypePropertiesContractResolver from似乎应该自动完成您需要的操作。由于您已经在使用Json.NET,我认为,在序列化派生类型时,您可以使用中的任一答案来抑制RealmObject或其基类型的所有属性的序列化。特别是IgnoreTypePropertiesContractResolver from似乎应该自动执行您需要的操作。感谢您的帮助-我已经阅读了文档,但错过了这一点。好多了!谢谢你,我读了文件,但是错过了这个。好多了!