0

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 はそれ自体がオブジェクトであるため、これらは両方とも として設定されているため、つまずきましたstringsJson文字列の意味を理解するのに苦労していLink2CSharpましたが、解決するのに役立ちました。

4

1 に答える 1

3

json に対してクラスを再構築する必要があると思います。json2csharp を使用して、 Json に対して C# クラスを生成してみることができます(json に対して C# クラスを自動的に作成する場合は、非常に優れたリソースです)。以下は、それが与える構造です。これを JSON.Net で使用して、オブジェクトを取得できます。

public class EndDate
{
    public int year { get; set; }
}

public class StartDate
{
    public int year { get; set; }
}

public class Value
{
    public string degree { get; set; }
    public EndDate endDate { get; set; }
    public string fieldOfStudy { get; set; }
    public int id { get; set; }
    public string schoolName { get; set; }
    public StartDate __invalid_name__
startDate { get; set; }
}

public class Educations
{
    public int _total { get; set; }
    public List<Value> values { get; set; }
}

public class RootObject
{
    public string _key { get; set; }
    public Educations educations { get; set; }
    public string emailAddress { get; set; }
    public string firstName { get; set; }
    public string lastName { get; set; }
}
于 2012-11-29T11:00:13.793 に答える