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

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

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

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

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

5回答

565閲覧

Xamarin.FormsでのJson.netのシリアライズ

ruhi

総合スコア6

C#

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

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

1クリップ

投稿2018/09/06 07:49

編集2022/01/12 10:55

前提・実現したいこと

オブジェクトをJsonにシリアライズしたいです。

発生している問題・エラーメッセージ

初歩的な質問なんですが、Json.netでオブジェクト(名前Personのモデルクラスのインスタンス)をJsonにシリアライズしたいのですが、出力すると「{}」しか出力されません。自分なりにvisual studioのブレークポイントを使って原因を調べてみたところ、モデルクラスのプロパティがなぜかnon-public membersになっており、これが原因でアクセスできないと考えました。しかしモデルクラスはすべてpublicアクセサをつけて定義しているのに、なぜnon-public membersと出てしまうのでしょうか。
イメージ説明

該当のソースコード

C#

1//モデルクラスです。 2[JsonObject("person")] 3 public class Person 4 { 5 6 [JsonProperty("name")] 7 public string Name { get; set; } 8 [JsonProperty("password")] 9 public string Password { get; set; } 10 [JsonProperty("birthday")] 11 public string Birthday { get; set; } 12 [JsonProperty("gender")] 13 public int Gender { get; set; } 14 [JsonProperty("prefecture")] 15 public int Prefecture { get; set; } 16 } 17// 18//省略// 19//省略// 20//ボタンをクリックされたときに設定されてるイベントです。 21 public void SignUpClicked(object sender, EventArgs e) 22 { 23 var person = new Person() 24 { 25 //入力された情報をpersonクラスに代入してます。 26 Name = Model.User_Name, 27 Password = Model.Pass, 28 Birthday = BirthDay, 29 Gender = GenId, 30 Prefecture = PreId 31 }; 32 out_Json = JsonConvert.SerializeObject(person);//out_JsonにシリアライズされたJsonを代入してます。 33 34 DisplayAlert( 35 "info", string.Format("Value1: {0}",out_Json),"close"); 36 37 }

試したこと

一回personモデルクラスのプロパティーを自動実装を使用せずに実装しました。

補足情報(FW/ツールのバージョンなど)

visual studio 2018
xamarin.forms

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

普通に C# の .NET アプリの場合は以下の画像の通り期待した結果が得られます。Xamarin.Forms ということで違うのかもしれませんし、何が質問者さんの問題の原因かは分かりませんが、ご参考まで。

イメージ説明

なお、JsonObject, JsonProperty 属性の有無はシリアル化には直接の影響はないです。属性を付与しない場合は以下のように JSON 文字列の名前の大文字小文字が C# のコードのプロパティ名と同じになるだけです。

{"Name":"名前","Password":"パスワード","Birthday":"誕生日","Gender":1,"Prefecture":2}

投稿2018/09/07 03:45

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ruhi

2018/09/10 09:09

ご返答ありがとうございます。参考にさせてもらいます。
guest

0

動作環境は、visual studio 2017でしょうか?

添付頂いているキャプチャを見る限り、ただのセッター/ゲッターではない様に見えます。
(Personクラスとローカル変数一覧のPersonクラスのキャプチャが一致していないのでは・・・?)

異なっているのであれば、一番シンプルなパターンに戻して確認するか
実際のプログラムを提示して頂くかが必要かと思います。

投稿2018/09/10 04:51

koshiro_

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ruhi

2018/09/10 09:02

ご返答ありがとうございます。ローカル変数のpersonは、Personクラス(モデルクラス)のインスタンスがpersonです。そして、プログラムも実際に実装しているものの抜粋です。
koshiro_

2018/09/10 23:32

ご回答ありがとうございます。使った事ないのでわかりませんが、ローカル変数一覧の<BirthDay> k__BackingFiled 等はPersonクラスには存在していないのでどこかで宣言していると考えたのですが・・・ 自動生成されるPartialなPersonクラスも無いという事ですよね・・・?
guest

0

プロパティが全て null になっていないかどうか確かめてください。
適当な値を設定すれば表示されませんか?

投稿2018/09/10 01:54

Zuishin

総合スコア28656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ruhi

2018/09/10 09:06

ご返答ありがとうございます。ご指摘されたこと(適切な値を代入)をしてみましたが、nullでもなくちゃんと変数が入っているのにもかかわらず、表示されませんでした。
guest

0

Xamarin.Forms で試してみましたが、大丈夫そうです。特別なことはしていないはずです。

C#

1using Newtonsoft.Json; 2using System; 3using Xamarin.Forms; 4 5namespace App0910JSON 6{ 7 [JsonObject("person")] 8 public class Person 9 { 10 [JsonProperty("name")] 11 public string Name { get; set; } 12 [JsonProperty("password")] 13 public string Password { get; set; } 14 [JsonProperty("birthday")] 15 public string Birthday { get; set; } 16 [JsonProperty("gender")] 17 public int Gender { get; set; } 18 [JsonProperty("prefecture")] 19 public int Prefecture { get; set; } 20 } 21 22 public partial class MainPage : ContentPage 23 { 24 public MainPage() 25 { 26 InitializeComponent(); 27 } 28 29 private void Button_OnClicked(object sender, EventArgs e) 30 { 31 var person = new Person() {Name = "User", Birthday = "20180910", Gender = 1, Password = "test", Prefecture = 1}; 32 33 var out_Json = JsonConvert.SerializeObject(person); 34 35 DisplayAlert("info", string.Format("Value1: {0}", out_Json), "close"); 36 } 37 } 38}

イメージ説明

投稿2018/09/10 00:46

NakamuraYoichi

総合スコア374

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ruhi

2018/09/10 09:05

ご返答ありがとうございます。自分もほかのコンソールプロジェクトを立ち上げ、似たようなプログラムをコーディングし、テストを行いました。結果は成功しましたが、余計に原因がわからなくなってしまいました。
guest

0

Personクラスにも属性[JsonObject("person")]を付けてみてください。

投稿2018/09/06 10:02

hihijiji

総合スコア4150

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ruhi

2018/09/06 10:07

回答ありがとうございます。ご指摘いただいたことを実行したのですが、やはり同じ結果となってしまいました。
hihijiji

2018/09/07 03:55

out_Json = JsonConvert.SerializeObject(person); にブレークポイントを置いた結果が画像だとすると、JSON関係ないですよね。
ruhi

2018/09/07 03:58

ブレークポイントはout_Json = JsonConvert.SerializeObject(person);より下に置きました。
hihijiji

2018/09/07 03:59

名前空間違いの別のPersonクラスが有ったりしませんか?
hihijiji

2018/09/07 04:01

out_Json = JsonConvert.SerializeObject(person); の前後で確認してみてください。
ruhi

2018/09/07 04:01

ありませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問