[解決済み] JsonConvert.DeserializeObject を使用して、Json を C# POCO クラスにデシリアライズする。
質問
以下は、私の簡単な
User
POCOクラスです。
/// <summary>
/// The User class represents a Coderwall User.
/// </summary>
public class User
{
/// <summary>
/// A User's username. eg: "sergiotapia, mrkibbles, matumbo"
/// </summary>
public string Username { get; set; }
/// <summary>
/// A User's name. eg: "Sergio Tapia, John Cosack, Lucy McMillan"
/// </summary>
public string Name { get; set; }
/// <summary>
/// A User's location. eh: "Bolivia, USA, France, Italy"
/// </summary>
public string Location { get; set; }
public int Endorsements { get; set; } //Todo.
public string Team { get; set; } //Todo.
/// <summary>
/// A collection of the User's linked accounts.
/// </summary>
public List<Account> Accounts { get; set; }
/// <summary>
/// A collection of the User's awarded badges.
/// </summary>
public List<Badge> Badges { get; set; }
}
そして、私が使っているメソッドは、JSON レスポンスをデシリアライズして
User
オブジェクト(この実際の
JSONの呼び出しはこちら
):
private User LoadUserFromJson(string response)
{
var outObject = JsonConvert.DeserializeObject<User>(response);
return outObject;
}
これは例外を発生させます。
現在のJSONオブジェクト(例:{"name":"value"})はデシリアライズできない。 タイプに 'System.Collections.Generic.List`1[CoderwallDotNet.Api.Models.Account]' とする。 この型はデシリアライズのためにJSON配列(例:[1,2,3])を必要とするからです。 を正しく表示します。
このエラーを修正するには、JSON を JSON 配列に変更します。 (例: [1,2,3]) または、デシリアライズされた型が通常の .NET型(例:整数のようなプリミティブ型や、コレクション型ではなく 配列やリストのような型) からデシリアライズすることができ、JSON オブジェクトを作成します。また、JsonObjectAttributeを型に追加することで、強制的に を使用して、JSONオブジェクトからデシリアライズすることができます。パス 'accounts.github', ライン 1, の位置は129です。
このDeserializeObjectメソッドを扱ったことがないので、ここでちょっと行き詰まっています。
POCOクラスのプロパティ名が、JSONレスポンスの名前と同じであることを確認しました。
このPOCOクラスにJSONをデシリアライズするには、何を試せばよいのでしょうか?
どのように解決するのですか?
以下は動作例です。
キーポイントは
-
の宣言
Accounts
-
使用方法
JsonProperty
属性
.
using (WebClient wc = new WebClient())
{
var json = wc.DownloadString("http://coderwall.com/mdeiters.json");
var user = JsonConvert.DeserializeObject<User>(json);
}
-
public class User
{
/// <summary>
/// A User's username. eg: "sergiotapia, mrkibbles, matumbo"
/// </summary>
[JsonProperty("username")]
public string Username { get; set; }
/// <summary>
/// A User's name. eg: "Sergio Tapia, John Cosack, Lucy McMillan"
/// </summary>
[JsonProperty("name")]
public string Name { get; set; }
/// <summary>
/// A User's location. eh: "Bolivia, USA, France, Italy"
/// </summary>
[JsonProperty("location")]
public string Location { get; set; }
[JsonProperty("endorsements")]
public int Endorsements { get; set; } //Todo.
[JsonProperty("team")]
public string Team { get; set; } //Todo.
/// <summary>
/// A collection of the User's linked accounts.
/// </summary>
[JsonProperty("accounts")]
public Account Accounts { get; set; }
/// <summary>
/// A collection of the User's awarded badges.
/// </summary>
[JsonProperty("badges")]
public List<Badge> Badges { get; set; }
}
public class Account
{
public string github;
}
public class Badge
{
[JsonProperty("name")]
public string Name;
[JsonProperty("description")]
public string Description;
[JsonProperty("created")]
public string Created;
[JsonProperty("badge")]
public string BadgeUrl;
}
関連
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない
-
[解決済み] 正しいJSONコンテンツタイプは何ですか?
-
[解決済み] JSONでコメントを使用することはできますか?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] JavaScriptでJSONをきれいに印刷する
-
[解決済み] クラスをJSONシリアライザブルにする方法
-
[解決済み] JSONをC#のダイナミックオブジェクトにデシリアライズする?
-
[解決済み] GsonでList<T>オブジェクトをデシリアライズする?
-
[解決済み] JSON配列(例: [1,2,3])をtype ' ' にデシリアライズできない。typeはJSONオブジェクト(例: {"name": "value"}) を必要とするので、正しくデシリアライズされない。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] エンティティタイプ ApplicationUser は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
[解決済み】統合マネージドパイプラインモードで適用されないASP.NETの設定が検出された
-
解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C# [解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C#.
-
[解決済み] UnityでOnCollisionEnterが呼ばれない
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み】プロセスが実行されているかどうかを知るには?
-
[解決済み】スレッド終了またはアプリケーションの要求により、I/O操作が中断されました。