【发布时间】:2018-11-16 08:03:17
【问题描述】:
我正在尝试创建一个通用类,它可以存储任何类型的传入 json 的响应以避免拆箱我限制 T 必须从 RealmObject 派生
public class Response<T> where T : RealmObject
{
public string errorMessage { get; set; }
public string status { get; set; }
public string totalPages {get;set;}
public IList<T> responseBody { get; set; }
}
这里,responseBody 参数能够存储从 web 服务获取的联系人列表、客户或订单数据。为了实现这一点,我试图
扩展 JsonConverter 以控制反序列化过程。
从服务器收到的Json如下(联系人类型数据)
{
"errorMessage": "",
"status": "Ok",
"totalPages": 1,
"contactsList": [
{
"firstName": "Ronald",
"lastName": "Brownn"
},
{
"firstName": "Elvis",
"lastName": "Presley"
}
]
}
以下是我的Contact 模特
[JsonCustomAttribute("contactsList")]
public class Contact : RealmObject
{
public string firstName {get;set;}
public string lastName { get; set; }
}
到目前为止,我正在尝试使用 JsonConverter 反序列化传入的 json。在这里你可以看到我必须明确找到contactsList 属性,然后需要创建Response 具有泛型类型Contact 的对象以将所有Contact 数据添加到
responseBody。所以有什么办法可以使这些东西通用化,我的意思是动态找到contactList或customerList或orderList并动态创建Response<Contact>或Response<Customer>等。
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JObject jObject = JObject.Load(reader);
//For contact only
JArray jArray = jObject.Property("contactsList").Value as JArray;
Response<Contact> response = new Response<Contact>();
response.responseBody = jArray.ToObject<IList<Contact>>();
serializer.Populate(jObject.CreateReader(), response);
return response;
}
【问题讨论】:
-
正如我所提到的,这不仅仅是联系,将来还会有其他实体以及客户、订单等。我正在寻找通用解决方案
-
好的,我想我明白你现在想要做什么了。通过使用
Data之类的通用属性名称来简化事情 -
是的,我误解/误解了原始问题。
-
您能控制从服务器返回的数据吗?
-
不,我没有任何控制权
标签: c# xamarin json.net realm json-deserialization