我真的很难在C#中找到任何JSON反序列化的示例,每个JSON项中的第一个属性都是不同的ID。
{
"12112083":{
"Topic_ID":"12112083",
"Moved_ID":"51",
"subject":"subject text goes here"
},
"12111966":{
"Topic_ID":"12111966",
"Moved_ID":"51",
"subject":"another subject text"
},
"12106917":{
"Topic_ID":"12106917",
"Moved_ID":"0",
"subject":"test"
}
}我已经尝试了几种不同的方法,但都没有成功。我无法控制返回的JSON,它有时是单个项,有时是一个数组,如上面的示例所示。理想情况下,如果可能的话,我希望反序列化成一个类型化的对象类。
谢谢
谢谢L.B
我已经尝试了所提供的代码示例,传递了以下字符串
'{"12112083":{"Topic_ID":"12112083","Moved_ID":"51","subject":"Due to a computer virus, many of my files are \u005C"Crypted\u005C",espe","Start_date":"10/6/2012 6:54:37 PM","InitialResponseDueDate":"10/6/2012 7:01:37 PM","Locked":"0","QValue":"$10","Status":"1","Author_ID":"71318191","Question_Text":"Due to a computer virus, many of my files are \u005C"Crypted\u005C",especially my pictures. Now my FinepixA500 camera will not upload photos to my computer (laptop). Geek Squad could not crack the code and suggested that I contact Toshiba and have them reset the computer to its original manufacturer settings. If I do that, I will lose all of my data. The only thing that appears not to be working is \u005C"photo gallery\u005C". (therefore, my camera will not upload photos anymore.....) Any suggestions?","Username":"JACUSTOMER-iei7o0tr-","No_of_Questions":"0","No_of_Accepts":"0","Last_visit":"10/6/2012 7:22:18 PM","Join_Date":"10/6/2012 6:46:29 PM","lastExpert":"","IsPress":"False","hasCustomerOptOuts":"0","RecCount":"0","OptedOut":"","Urgency":"51","AuthorHasSubscription":"False","Relisted":"0","IsAbandoned":"False","categoryName":"Camera and Video","categoryName_Additional":"Laptop","QuestionCommissionHasAdjusted":"False","LockedBy":"-1","IsOnline":"False","QuestionLink":"/video-camera-repair/77lqr-due-computer-virus-files-crypted-espe.html","WaitingForYou":"False","RequestedForYou":"False","IsChatEnabled":"False","ChangedKeyList":"","DeltaType":"A"},"12111966":{"Topic_ID":"12111966","Moved_ID":"51","subject":"office/outlook for mac 2011 keeps hanging upMicrosoft Error","Start_date":"10/6/2012 6:25:06 PM","InitialResponseDueDate":"10/6/2012 7:25:06 PM","Locked":"0","QValue":"$19","Status":"1","Author_ID":"71317792","Question_Text":"office/outlook for mac 2011 keeps hanging upMicrosoft Error Reporting log version: 2.0<br/><br/>Error Signature:<br/>Exception: EXC_CRASH (SIGTRAP)<br/>Date/Time: 2012-10-06 17:59:38 +0000<br/>Application Name: Microsoft Outlook<br/>Application Bundle ID: com.microsoft.Outlook<br/>Application Signature: OPIM<br/>Application Version: 14.2.4.120824<br/>Crashed Module Name: merp<br/>Crashed Module Version: 2.2.4.120824<br/>Crashed Module Offset: 0x00003aa2<br/>Blame Module Name: Microsoft Outlook<br/>Blame Module Version: 14.2.4.120824<br/>Blame Module Offset: 0x003c900c<br/>Application LCID: 1033<br/>Extra app info: Reg=en Loc=0x0409<br/>Crashed thread: 10","Username":"JACUSTOMER-wr0d1qwb-","No_of_Questions":"0","No_of_Accepts":"0","Last_visit":"10/6/2012 6:54:53 PM","Join_Date":"10/6/2012 6:25:00 PM","lastExpert":"","IsPress":"False","hasCustomerOptOuts":"0","RecCount":"0","OptedOut":"","Urgency":"51","AuthorHasSubscription":"False","Relisted":"0","IsAbandoned":"False","categoryName":"Microsoft Office","categoryName_Additional":"","QuestionCommissionHasAdjusted":"False","LockedBy":"-1","IsOnline":"False","QuestionLink":"/microsoft-office/77lni-office-outlook-mac-2011-keeps-hanging-upmicrosoft-error.html","WaitingForYou":"False","RequestedForYou":"False","IsChatEnabled":"True","ChangedKeyList":"","DeltaType":"A"},"12106917":{"Topic_ID":"12106917","Moved_ID":"0","subject":"test","Start_date":"10/5/2012 6:22:42 PM","InitialResponseDueDate":"10/5/2012 6:40:42 PM","Locked":"0","QValue":"$21","Status":"1","Author_ID":"69617617","Question_Text":"test","Username":"JACUSTOMER-dwbsyao6-","No_of_Questions":"4","No_of_Accepts":"1","Last_visit":"10/6/2012 11:12:19 AM","Join_Date":"7/16/2012 12:59:47 PM","lastExpert":"","IsPress":"False","hasCustomerOptOuts":"0","RecCount":"0","OptedOut":"","Urgency":"0","AuthorHasSubscription":"True","Relisted":"0","IsAbandoned":"False","categoryName":"Computer","categoryName_Additional":"","QuestionCommissionHasAdjusted":"True","LockedBy":"-1","IsOnline":"True","QuestionLink":"/computer/77hr9-test.html","WaitingForYou":"False","RequestedForYou":"False","IsChatEnabled":"True","ChangedKeyList":"","DeltaType":"A"}}'我收到"InvalidCastException",无法将'System.String‘类型的对象强制转换为'Newtonsoft.Json.Linq.JObject’类型。
我尝试删除字符串开头和结尾的单引号,但得到了相同的消息?
发布于 2012-10-07 03:29:46
使用Json.Net
(发布的JSON无效。将无效的\u005C"%s替换为\u005C后,以下命令将起作用。)
string json = @"{""12112083"":{""Topic_ID"":""12112083"",""Moved_ID"":""51"",""subject"":""Due to a computer virus, many of my files are \u005CCrypted\u005C,espe"",""Start_date"":""10/6/2012 6:54:37 PM"",""InitialResponseDueDate"":""10/6/2012 7:01:37 PM"",""Locked"":""0"",""QValue"":""$10"",""Status"":""1"",""Author_ID"":""71318191"",""Question_Text"":""Due to a computer virus, many of my files are \u005CCrypted\u005C,especially my pictures. Now my FinepixA500 camera will not upload photos to my computer (laptop). Geek Squad could not crack the code and suggested that I contact Toshiba and have them reset the computer to its original manufacturer settings. If I do that, I will lose all of my data. The only thing that appears not to be working is \u005Cphoto gallery\u005C. (therefore, my camera will not upload photos anymore.....) Any suggestions?"",""Username"":""JACUSTOMER-iei7o0tr-"",""No_of_Questions"":""0"",""No_of_Accepts"":""0"",""Last_visit"":""10/6/2012 7:22:18 PM"",""Join_Date"":""10/6/2012 6:46:29 PM"",""lastExpert"":"""",""IsPress"":""False"",""hasCustomerOptOuts"":""0"",""RecCount"":""0"",""OptedOut"":"""",""Urgency"":""51"",""AuthorHasSubscription"":""False"",""Relisted"":""0"",""IsAbandoned"":""False"",""categoryName"":""Camera and Video"",""categoryName_Additional"":""Laptop"",""QuestionCommissionHasAdjusted"":""False"",""LockedBy"":""-1"",""IsOnline"":""False"",""QuestionLink"":""/video-camera-repair/77lqr-due-computer-virus-files-crypted-espe.html"",""WaitingForYou"":""False"",""RequestedForYou"":""False"",""IsChatEnabled"":""False"",""ChangedKeyList"":"""",""DeltaType"":""A""},""12111966"":{""Topic_ID"":""12111966"",""Moved_ID"":""51"",""subject"":""office/outlook for mac 2011 keeps hanging upMicrosoft Error"",""Start_date"":""10/6/2012 6:25:06 PM"",""InitialResponseDueDate"":""10/6/2012 7:25:06 PM"",""Locked"":""0"",""QValue"":""$19"",""Status"":""1"",""Author_ID"":""71317792"",""Question_Text"":""office/outlook for mac 2011 keeps hanging upMicrosoft Error Reporting log version: 2.0<br/><br/>Error Signature:<br/>Exception: EXC_CRASH (SIGTRAP)<br/>Date/Time: 2012-10-06 17:59:38 +0000<br/>Application Name: Microsoft Outlook<br/>Application Bundle ID: com.microsoft.Outlook<br/>Application Signature: OPIM<br/>Application Version: 14.2.4.120824<br/>Crashed Module Name: merp<br/>Crashed Module Version: 2.2.4.120824<br/>Crashed Module Offset: 0x00003aa2<br/>Blame Module Name: Microsoft Outlook<br/>Blame Module Version: 14.2.4.120824<br/>Blame Module Offset: 0x003c900c<br/>Application LCID: 1033<br/>Extra app info: Reg=en Loc=0x0409<br/>Crashed thread: 10"",""Username"":""JACUSTOMER-wr0d1qwb-"",""No_of_Questions"":""0"",""No_of_Accepts"":""0"",""Last_visit"":""10/6/2012 6:54:53 PM"",""Join_Date"":""10/6/2012 6:25:00 PM"",""lastExpert"":"""",""IsPress"":""False"",""hasCustomerOptOuts"":""0"",""RecCount"":""0"",""OptedOut"":"""",""Urgency"":""51"",""AuthorHasSubscription"":""False"",""Relisted"":""0"",""IsAbandoned"":""False"",""categoryName"":""Microsoft Office"",""categoryName_Additional"":"""",""QuestionCommissionHasAdjusted"":""False"",""LockedBy"":""-1"",""IsOnline"":""False"",""QuestionLink"":""/microsoft-office/77lni-office-outlook-mac-2011-keeps-hanging-upmicrosoft-error.html"",""WaitingForYou"":""False"",""RequestedForYou"":""False"",""IsChatEnabled"":""True"",""ChangedKeyList"":"""",""DeltaType"":""A""},""12106917"":{""Topic_ID"":""12106917"",""Moved_ID"":""0"",""subject"":""test"",""Start_date"":""10/5/2012 6:22:42 PM"",""InitialResponseDueDate"":""10/5/2012 6:40:42 PM"",""Locked"":""0"",""QValue"":""$21"",""Status"":""1"",""Author_ID"":""69617617"",""Question_Text"":""test"",""Username"":""JACUSTOMER-dwbsyao6-"",""No_of_Questions"":""4"",""No_of_Accepts"":""1"",""Last_visit"":""10/6/2012 11:12:19 AM"",""Join_Date"":""7/16/2012 12:59:47 PM"",""lastExpert"":"""",""IsPress"":""False"",""hasCustomerOptOuts"":""0"",""RecCount"":""0"",""OptedOut"":"""",""Urgency"":""0"",""AuthorHasSubscription"":""True"",""Relisted"":""0"",""IsAbandoned"":""False"",""categoryName"":""Computer"",""categoryName_Additional"":"""",""QuestionCommissionHasAdjusted"":""True"",""LockedBy"":""-1"",""IsOnline"":""True"",""QuestionLink"":""/computer/77hr9-test.html"",""WaitingForYou"":""False"",""RequestedForYou"":""False"",""IsChatEnabled"":""True"",""ChangedKeyList"":"""",""DeltaType"":""A""}}";
var jobj = (JObject)JsonConvert.DeserializeObject(json);
var items = jobj.Children()
.Cast<JProperty>()
.Select(j=>new
{
ID=j.Name,
Topic = (string)j.Value["Topic_ID"],
Moved = (string)j.Value["Moved_ID"],
Subject = (string)j.Value["subject"],
})
.ToList();发布于 2013-02-05 01:37:23
使用System.Web,我有一个小方法,似乎可以应用到每个使用JSON进行数据存储的项目中:
private T UnpackJson<T>(object data)
{
var serializer = new JavaScriptSerializer();
string rawJSON = serializer.Serialize(data);
var result = serializer.Deserialize<T>(rawJSON);
return result;
}...Where T是某种类型,其元素与您要反序列化的模式相匹配。对于顶部给出的斑点,我建议这样做:
// Using my above method...
var x = UnpackJson<Foo[]>(blob);
public class Foo
{
public string ID;
public Bar SubItem;
}
public class Bar
{
public int Topic_ID;
public int Subject_ID;
public string subject;
}...Note您的变量名称应该与JSON blob中的属性名称完全匹配!我当然希望这能起作用(请注意,虽然我使用了这个方法,并且确信它会将blob反序列化为一个类,但这个实现还没有经过测试。)
发布于 2012-10-07 03:25:20
为.NET使用JSON.NET - free JSON解析器/序列化程序。
https://stackoverflow.com/questions/12763011
复制相似问题