【发布时间】:2016-03-01 14:00:35
【问题描述】:
我有一个来自 Tika Rest Service 的 json,其中包含消息收件人列表。该列表如下所示:
"Message-Recipient-Address": [
"Mail1.Mail@mail.mail",
"Mail2.Mail@mail.mail"]
在我的模型中,我有
[JsonProperty("Message-Recipient-Address")]
public IList<string> MailRecipientAddress { get; set; }
尝试反序列化时,我收到以下错误消息。
将值“Mail1.Mail@mail.mail”转换为类型“System.Collections.Generic.IList`1[System.String]”时出错。路径“[0].Message-Recipient-Address”,第 1 行,位置 319
这是我的反序列化器(Restsharp)的代码
public class TikaDeserializer : IDeserializer
{
private Newtonsoft.Json.JsonSerializer serializer;
public TikaDeserializer(Newtonsoft.Json.JsonSerializer serializer)
{
this.serializer = serializer;
}
public T Deserialize<T>(RestSharp.IRestResponse response)
{
var content = response.Content;
using(var stringReader = new StringReader(content))
{
using(var jsonTextReader = new JsonTextReader(stringReader))
{
return serializer.Deserialize<T>(jsonTextReader);
}
}
}
public string DateFormat { get; set; }
public string Namespace { get; set; }
public string RootElement { get; set; }
public static TikaDeserializer Default
{
get
{
return new TikaDeserializer(new Newtonsoft.Json.JsonSerializer()
{
NullValueHandling = NullValueHandling.Ignore,
});
}
}
}
这里是主程序代码
class Program
{
static void Main(string[] args)
{
var request = new RestRequest("rmeta", Method.PUT);
request.AddHeader("Accept", "application/json");
request.AddParameter("application/octet-stream", File.ReadAllBytes(@"D:\Wienchol.msg"),ParameterType.RequestBody);
var response = Execute<List<ParsedDocument>>(request);
}
public static T Execute<T>(RestRequest request) where T : new()
{
var client = Client(@"http://localhost:9998");
client.AddHandler("application/json", TikaDeserializer.Default);
client.AddHandler("text/json", TikaDeserializer.Default);
client.AddHandler("text/x-json", TikaDeserializer.Default);
client.AddHandler("text/javascript", TikaDeserializer.Default);
client.AddHandler("*+json", TikaDeserializer.Default);
var response = client.Execute<T>(request);
if(response.ErrorException != null)
{
throw new SystemException(response.ErrorMessage);
}
return response.Data;
}
}
任何线索我做错了什么,或者为什么这不起作用?先感谢您, 斯蒂芬
【问题讨论】:
-
你用什么反序列化的?可以发一下代码吗?
-
您的 Json 字符串不完整,因此请说明(仅缺少
{和}?)。同样通过您的编辑,您仍然没有向我们展示您在哪里调用反序列化。 -
显示整个 JSON 请求。
-
您尝试反序列化 json 的代码在哪里?
-
您可以使用 response.Content.Split(new char[] { ':', ',', '[', ']' }) 而不是 JSONSerializer。
标签: c# json json.net json-deserialization