- 已关闭**。此问题需要details or clarity。当前不接受答案。
- 想要改进此问题?**添加详细信息并通过editing this post阐明问题。
14小时前关门了。
Improve this question
我正在通过JSON从我的. net应用程序的API中使用一些调查数据。我已经从我的. net应用程序中的JSON文件创建了一个类。JSON有一个名为Response []的节点,它是一个数组-所以我的调查平台返回给我多个调查。当我返回两个或更多调查时,这非常有效(因为它是一个数组)。
var root = JsonConvert.DeserializeObject<SurveyJsonModel.Rootobject>(json);
然而,如果调查平台只返回一个调查,那么反序列化就会失败,我怀疑JSON没有返回数组。请参见所附的我从JSON创建的模型的屏幕截图。知道我是如何解决的吗?这样它既适用于一个记录,也适用于多个记录?也不会因为零个记录而失败。我怀疑我的模型需要更改,还是需要使用不同的反序列化方法
TIA
我收到的错误消息是:
请参见下面的错误消息:
发生序列化异常:无法将当前JSON对象(例如,{" name ":" value "})反序列化为类型"SurveyJsonModel + Response []",因为该类型需要JSON数组(例如,[1,2,3])才能正确反序列化。若要修复此错误,请将JSON更改为JSON数组(例如,[1,2,3]),或者更改反序列化的类型,使其成为可以从JSON对象反序列化的普通. NET类型(例如,不是像整数这样的基元类型,也不是像数组或列表这样的集合类型)。还可以将JsonObjectAttribute添加到该类型,以强制它从JSON对象反序列化。
这是我正在使用的类-我不确定在哪里添加构造函数
public class SurveyJsonModel
{
public class Rootobject
{
public Xml xml { get; set; }
public Responses Responses { get; set; }
}
public class Xml
{
public string version { get; set; }
}
public class Responses
{
public Response[] Response { get; set; }
}
public class Response
{
public string startDate { get; set; }
public string endDate { get; set; }
public string status { get; set; }
public string ipAddress { get; set; }
}
}
这是我的JSON字符串,返回一个结果,如果它返回两个调查,我的代码工作-但下面失败的一个记录,因为它不是一个数组
{"?xml ":{"@版本":"1.0 "},"响应":{"响应":{"开始日期":" 2023年1月26日10:13:16 ","结束日期":" 2023年1月26日10:13:29 ","状态":" 0 "," IP地址":" www.example.com "}}192.168.0.1"}}}
2条答案
按热度按时间polhcujo1#
如果您使用的是.NET Core 3或更高版本,则可以尝试将
Response
属性的类型更改为JsonElement
,并检查ValueKind
属性以查看它是对象还是数组。hgb9j2n62#
你不需要任何定制的转换器,在这种情况下,我通常建议创建一个非常简单的JsonConstructor。