[英]Using JavaScriptSerializer to Deserialize JSON C# - type not supported for deserialization of an array
New to C# and JSON but basically I have to use a C# script component in SSIS to extract data from a web service. C#和JSON的新手,但基本上我必须在SSIS中使用C#脚本组件才能从Web服务中提取数据。 I was able to do it initially with a different JSON format but this one includes an array.
最初,我能够使用其他JSON格式执行此操作,但是其中包含一个数组。 I get the following error:
我收到以下错误:
"Type 'Rootobject' is not supported for deserialization of an array."
“数组反序列化不支持类型'Rootobject'。”
Below is how I call the Deserializer: 以下是我称反序列化器的方式:
//Deserialize our JSON
JavaScriptSerializer sr = new
jsonResponse = sr.Deserialize<Rootobject>(responseFromServer);
Here is my JSON structure (not quite all since fairly large): 这是我的JSON结构(因为相当大,所以不是全部):
[
{
"status":"SUCCESS",
"object":{
"responseStatusCode":0,
"productId":"35100003",
"cansimId":"251-0008",
"cubeTitleEn":"Average counts of young persons in provincial and territorial correctional services",
"cubeTitleFr":"Comptes moyens des adolescents dans les services correctionnels provinciaux et territoriaux",
"cubeStartDate":"1997-01-01",
"cubeEndDate":"2017-01-01",
"frequencyCode":12,
"nbSeriesCube":174,
"nbDatapointsCube":3468,
"releaseTime":"2019-05-09T08:30",
"archiveStatusCode":"2",
"archiveStatusEn":"CURRENT - a cube available to the public and that is current",
"archiveStatusFr":"ACTIF - un cube qui est disponible au public et qui est toujours mise a jour",
"subjectCode":[
"350102",
"4211"
],
"surveyCode":[
"3313"
],
"dimension":[ ],
"footnote":[ ],
"correction":[
]
}
}
]
Finally here is my Class structure obtained through Paste Special in Visual Studio: 最后,这是通过Visual Studio中的选择性粘贴获得的我的类结构:
public class Rootobject
{
public Class1[] Property1 { get; set; }
}
public class Class1
{
public string status { get; set; }
public Object _object { get; set; }
}
public class Object
{
public int responseStatusCode { get; set; }
public string productId { get; set; }
public string cansimId { get; set; }
public string cubeTitleEn { get; set; }
public string cubeTitleFr { get; set; }
public string cubeStartDate { get; set; }
public string cubeEndDate { get; set; }
public int frequencyCode { get; set; }
public int nbSeriesCube { get; set; }
public int nbDatapointsCube { get; set; }
public string releaseTime { get; set; }
public string archiveStatusCode { get; set; }
public string archiveStatusEn { get; set; }
public string archiveStatusFr { get; set; }
public string[] subjectCode { get; set; }
public string[] surveyCode { get; set; }
public Dimension[] dimension { get; set; }
public Footnote[] footnote { get; set; }
public object[] correction { get; set; }
}
public class Dimension
{
public int dimensionPositionId { get; set; }
public string dimensionNameEn { get; set; }
public string dimensionNameFr { get; set; }
public bool hasUom { get; set; }
public Member[] member { get; set; }
}
public class Member
{
public int memberId { get; set; }
public int? parentMemberId { get; set; }
public string memberNameEn { get; set; }
public string memberNameFr { get; set; }
public string classificationCode { get; set; }
public string classificationTypeCode { get; set; }
public int? geoLevel { get; set; }
public int? vintage { get; set; }
public int terminated { get; set; }
public int? memberUomCode { get; set; }
}
public class Footnote
{
public int footnoteId { get; set; }
public string footnotesEn { get; set; }
public string footnotesFr { get; set; }
public Link link { get; set; }
}
public class Link
{
public int footnoteId { get; set; }
public int dimensionPositionId { get; set; }
public int memberId { get; set; }
}
I know the problem lies within how I call the Deserialize<Rootobject>
and different data types but I wasn't able to find the solution. 我知道问题出在如何调用
Deserialize<Rootobject>
和不同的数据类型之内,但我找不到解决方案。 Any suggestions are appreciated. 任何建议表示赞赏。
AV 影音
Try deserializing directly to a list of Class1
. 尝试直接反序列化为
Class1
的列表。
jsonResponse = sr.Deserialize<List<Class1>>(responseFromServer);
Also, don't use Object
as your class name. 另外,不要使用
Object
作为类名。 That's a really bad practice. 这是一个非常糟糕的做法。
You can control how JSON.NET serializes/deserializes a property as shown here: How can I change property names when serializing with Json.net? 您可以控制JSON.NET如何对属性进行序列化/反序列化,如下所示: 使用Json.net进行序列化时,如何更改属性名称?
eg 例如
[JsonProperty(PropertyName = "object")]
public class MyObject
{
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.