質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

DataMemberAttribute 属性でマークしてくださいとは何をすればいいのか知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

1回答

0グッド

0クリップ

539閲覧

投稿2022/11/10 10:58

編集2022/11/10 23:52

提示コードですがwebサイトのログインするコードなのですが以下の///のコードで以下の例外が発生しています。DataMemberAttribute 属性でマークしてくださいとはどういう意味なのでしょうか?
参考サイトのazureの設定今回の場合とは違う思います。

内部例外
InvalidDataContractException: 型 'test4.Program+Hero' をシリアル化できません。この型を DataContractAttribute 属性でマークするか、シリアル化するすべてのメンバーを DataMemberAttribute 属性でマークしてください。この型がコレクションの場合は、CollectionDataContractAttribute 属性でマークすることを検討してください。その他のサポートされている型については、Microsoft .NET Framework のマニュアルを参照してください。
参考サイト

まねたサイト: http://www.surferonwww.info/BlogEngine/post/2019/09/29/call-aspnet-web-api-from-httpclien.aspx
マイクロソフトリファレンス:https://docs.microsoft.com/ja-jp/dotnet/api/system.runtime.serialization.json.datacontractjsonserializer.writeobject?view=net-7.0#system-runtime-serialization-json-datacontractjsonserializer-writeobject(system-io-stream-system-object)
azure: https://www.ipentec.com/document/microsoft-azure-add-api-access-permission-to-azure-active-directory-application

cs

1using Newtonsoft.Json; 2using System; 3using System.Collections.Generic; 4using System.IO; 5using System.Linq; 6using System.Net.Http; 7using System.Runtime.Serialization.Json; 8using System.Text; 9using System.Threading.Tasks; 10 11namespace test4 12{ 13 internal class Program 14 { 15 16 public class Token 17 { 18 public string access_token { get; set; } 19 20 public string token_type { get; set; } 21 22 public int expires_in { get; set; } 23 24 public string userName { get; set; } 25 } 26 27 // Web API に POST 送信するデータ 28 public class Hero 29 { 30 public int Id { get; set; } 31 32 public string Name { get; set; } 33 } 34 35 private static string loginUrl = "https://mstdn.jp/login"; 36 private static string apiUrl = "https://mstdn.jp/"; 37 private static string email = "XXXX@gmail.com"; 38 private static string passsword = "XXXXXXXX"; 39 private static int id = 6; 40 private static string name = "sample"; 41 private static string token = "XXXXXXXXXX"; 42 43 private static async Task f() 44 { 45 46 var client = new HttpClient(); 47 client.DefaultRequestHeaders.Add("User-Agent","Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko"); 48 49 // POST 送信を指定 50 var request = new HttpRequestMessage(HttpMethod.Post, apiUrl); 51 52 // POST 送信する JSON 文字列 53 string postData = ""; 54 55 // Hero オブジェクトを生成しそれを JSON 文字列に 56 // シリアライズする 57 Hero postHero = new Hero(); 58 postHero.Id = 0; 59 postHero.Name = "test"; 60 61 62 // シリアライズは DataContractJsonSerializer を使う 63 using (MemoryStream stream = new MemoryStream()) 64 { 65 var ser = new DataContractJsonSerializer(typeof(Hero)); 66 67 Console.WriteLine("testestesete"); 68 ////////////////////////////////////////////////////////////////////////////////////////////////// 69 ser.WriteObject(stream, postHero); 70 /////////////////////////////////////////////////////////////////////////////////////////////////// 71 72 Console.WriteLine("あさあああ"); 73 74 stream.Position = 0; 75 using (var reader = new StreamReader(stream)) 76 { 77 78 79 postData = reader.ReadToEnd(); 80 } 81 82 } 83 84 // Content-Type: application/json; charset=utf-8 が 85 // 要求ヘッダに必要。それを POST 送信する JSON 文字 86 // 列と共にここで設定 87 request.Content = new StringContent(postData, 88 Encoding.UTF8, 89 "application/json"); 90 91 // 認証トークンを要求ヘッダに設定 92 request.Headers.Add("Authorization", 93 "Bearer " + token); 94 95 // JSON 文字列を SendAsync で POST 送信する 96 var response = await client.SendAsync(request); 97 98 // 応答コンテンツを Stream として取得 99 using (Stream responseStream = 100 await response.Content.ReadAsStreamAsync()) 101 { 102 // JSON シリアライザの初期化 103 //var ser = new DataContractJsonSerializer(typeof(List<Hero>)); 104 /* 105 // 応答コンテンツを逆シリアル化して C# のオブジ 106 // ェクトを取得 107 List<Hero> heros = 108 (List<Hero>)ser.ReadObject(responseStream); 109 110 string result = ""; 111 foreach (Hero hero in heros) 112 { 113 result += string.Format("{0}: {1}\r\n", 114 hero.Id, hero.Name); 115 116 117 } 118 */ 119 //this.textBox5.Text = result; 120 } 121 122 123 124 125 126 //HttpResponseMessage res = await client.GetAsync("https://mstdn.jp/api/v1/timelines/public?limit=2"); 127 128 //Console.WriteLine(response.EnsureSuccessStatusCode()); 129 130 //string responseBody = await response.Content.ReadAsStringAsync(); 131 //var responseBody = res.Content.ReadAsStringAsync().Result; 132 133 //var contents = response.Content.ReadAsStringAsync().Result; 134 //var json = JsonConvert.DeserializeObject(responseBody); 135 136 137 138 // Above three lines can be replaced with new helper method below 139 // string responseBody = await client.GetStringAsync(uri); 140 141 //Console.WriteLine(json); 142 } 143 144 private static async void t() 145 { 146 Task.WaitAll(f()); 147 } 148 149 150 static void Main(string[] args) 151 { 152 t(); 153 154 155 Console.ReadKey(); 156 } 157 } 158} 159

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2022/11/10 22:08依頼された後にこの質問は修正されています

こちらの質問が複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました。

回答1

0

ベストアンサー

原因

[DataContract],[DataMember]の二つが抜けていた。

cs

1 // Web API に POST 送信するデータ 2 [DataContract] 3 internal class Hero 4 { 5 [DataMember] 6 public int Id { get; set; } 7 8 [DataMember] 9 public string Name { get; set; } 10 } 11

参考サイト:https://www.lisz-works.com/entry/cs-datacontractjsonserializer

投稿2022/11/11 00:00

退会済みユーザー

退会済みユーザー

総合スコア0

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。