jsonの一部をシリアル化するのに助けが必要です。DataContractJsonSerializerが例外をスローします。 'Element'の状態が予想されます。名前 ''、名前空間 ''を持つ 'Text'が発生しました
私は休憩サービスから応答を受け取り、サービスはjsonを返しています。その後、リクエストをクラスにマップしたいと思います。 DataContractJsonSerializerを使用していますが、動作させることができません。ここで
"Expecting state 'Element'.. Encountered 'Text' with name '', namespace ''. "
はコードです::
HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();
Stream responseStreamm = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStreamm);
string streamAsString = reader.ReadToEnd();
MemoryStream memoryStream = new MemoryStream(Encoding.Unicode.GetBytes(streamAsString)) {Position = 0};
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(List<MyClass>));
List<MyClass> myClass = (List<MyClass>)serializer.ReadObject(memoryStream);
そして、ここでは、MyClassのです:
[DataContract]
public class MyClass
{
[DataMember]
public string RawData { get; set; }
[DataMember]
public string StudentIdentity { get; set; }
[DataMember]
public string FirstName { get; set; }
[DataMember]
public string LastName { get; set; }
[DataMember]
public string SchoolName { get; set; }
[DataMember]
public string SchoolCode { get; set; }
[DataMember]
public string TypeOfEducation { get; set; }
[DataMember]
public string EducationCode { get; set; }
[DataMember]
public string NationalProgram { get; set; }
[DataMember]
public string Objective { get; set; }
[DataMember]
public string IssuingDate { get; set; }
[DataMember]
public string GradeType { get; set; }
[DataMember]
public string ProgramRange { get; set; }
[DataMember]
public string HourTotal { get; set; }
[DataMember]
public string BasicEligibility { get; set; }
[DataMember]
public string OccupationCompetence { get; set; }
[DataMember]
public string CourseOfStudyFromSchool { get; set; }
[DataMember]
public string Software { get; set; }
[DataMember]
public string SoftwareProvider { get; set; }
[DataMember]
public string ProgramType { get; set; }
[DataMember]
public string Note { get; set; }
}
からの応答データをシリアライズ次の例外がスローされ
サービスは:
"[{\"RawData\":\"\",\"StudentIdentity\":\"450101\",\"FirstName\":\"Kalle\",\"LastName\":\"Karlsson\",\"SchoolName\":\"\",\"SchoolCode\":\"SKL123\",\"TypeOfEducation\":\"\",\"EducationCode\":\"Code\",\"NationalProgram\":\"\",\"Objective\":\"Obj\",\"IssuingDate\":\"2012-01-28\",\"GradeType\":\"GradeType\",\"ProgramRange\":\"1\",\"HourTotal\":\"2000\",\"BasicEligibility\":\"BE\",\"OccupationCompetence\":\"OC\",\"CourseOfStudyFromSchool\":\"Y\",\"Software\":\"HAL213\",\"SoftwareProvider\":\"SchoolSoft\",\"ProgramType\":\"C\",\"Note\":\"Notering\",\"CourseInformation\":[{\"CourseCode\":\"ABC555\",\"Grade\":\"VG\",\"GradeDate\":\"2012-01-28\",\"Points\":\"50\",\"Comment1\":\"Kommentar1\",\"Comment2\":\"\",\"Comment3\":\"\",\"AddtionalInformation\":\"Info\",\"Exceptions\":null},{\"CourseCode\":\"DFG333\",\"Grade\":\"G\",\"GradeDate\":\"2012-01-28\",\"Points\":\"60\",\"Comment1\":\"\",\"Comment2\":\"\",\"Comment3\":\"\",\"AddtionalInformation\":\"\",\"Exceptions\":null}],\"Exceptions\":[]}]"
大変助かりました!
編集:
私はサービスコードを補完しています:私はそれをデシリアライズするときに、サービスの応答がMemoryStreamを持つあなたの余分な踊りが原因になっている疑いがあるために私をリードしており、動作することを
List<MyClass> myClass = validationManager.GetXmlAsAListOfEducationInformationObject();
JavaScriptSerializerserializer = new JavaScriptSerializer();
string jsonData = serializer.Serialize(myClass);
return jsonData;
サービスコードの周辺コンテキストを掲載することはできますか? JSON文字列に文字列をラップするサービス層からのエンコーディングが余計にあると思われます。サービス関数が 'string 012'ではなく' List 'の型を返すようにしたいのであれば、JSONを自動的にシリアライズするかもしれません。あなたがサービスのために使用しているものによって異なります。 –