LinkedIn Javascript API から取得した Json オブジェクトを逆シリアル化しようとしています。
{"_key":"~","educations":{"_total":2,"values":[{"degree":"Bachelor of Science (BSc)","endDate":{"year":2004},
"fieldOfStudy":"Computer Software Engineering","id":134450447,"schoolName":"Bristol University","
startDate":{"year":2009}},{"id":143651018,"schoolName":"University of Kingston"}]},"emailAddress":
"test@test.com","firstName":"Robert","lastName":"Matthews"}
これらの値を保存し、Json.NET を使用して逆シリアル化するカスタム クラスを作成しました。
[Serializable]
public class LinkedInUserData {
[JsonProperty(PropertyName = "emailAddress")]
public string EmailAddress { get; set; }
// other properties cut out for simplicity
[JsonProperty(PropertyName = "educations")]
public Educations Educations { get; set; }
}
[Serializable]
public class Educations {
[JsonProperty(PropertyName = "_total")]
public string Total { get; set; }
[JsonProperty(PropertyName = "values")]
public Values Values { get; set; }
}
[Serializable]
public class Values { // cut down for simplicity
[JsonProperty(PropertyName = "degree")]
public string Degree { get; set; }
}
LinkedInUserData linkedData = JsonConvert.DeserializeObject<LinkedInUserData>(profile);
問題なく単一のオブジェクト (配列なしなど) を変換できますが、次のエラー メッセージが表示され、Educations の Values オブジェクトでスタックします。
現在の JSON 配列 ([1,2,3] など) を型 'Data.Values' に逆シリアル化できません。この型では、正しく逆シリアル化するために JSON オブジェクト ({"name":"value"} など) が必要です。このエラーを修正するには、JSON を JSON オブジェクト (例: {"name":"value"}) に変更するか、逆シリアル化された型を配列または List のようなコレクション インターフェイス (ICollection、IList など) を実装する型に変更します。 JSON 配列から逆シリアル化されます。JsonArrayAttribute を型に追加して、強制的に JSON 配列から逆シリアル化することもできます。パス「educations.values」、1 行目、位置 47。
Educations の Values オブジェクトを文字列配列に変更しようとしましたが、うまくいきませんでした。Json からカスタム クラスに値を正常に逆シリアル化する方法はありますか、それとも文字列配列の行に沿って何かを取得することしかできませんか?
編集- (値の) リストの製品に次のエラーが表示されます:
文字列の読み取りエラー。予期しないトークン: StartObject。パス「educations.values[0].endDate」、1 行目、位置 96。
編集 2 - わかりました。リスト (値の) は機能しましたが、StartDate と EndDate はそれ自体がオブジェクトであるため、これらは両方とも として設定されているため、つまずきましたstrings
。Json
文字列の意味を理解するのに苦労していLink2CSharp
ましたが、解決するのに役立ちました。