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

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

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

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

2回答

3093閲覧

Android実機でJSONのDeserializeが行えない

zo3

総合スコア9

JSON

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/02/27 08:33

#JSONをDeserializeしてデータを使用したい
QuickTypeを使用し以下のソースを自動生成いたしました。

Android実機にて
こちらのソースで下のJSON文字列をFromJsonしたところ

C#

1namespace QuickType 2{ 3 using System; 4 using System.Collections.Generic; 5 6 using System.Globalization; 7 using Newtonsoft.Json; 8 using Newtonsoft.Json.Converters; 9 10 public partial class UserData 11 { 12 [JsonProperty("count")] 13 public Dictionary<string, Count> Count { get; set; } 14 15 [JsonProperty("score")] 16 public Dictionary<string, Count> Score { get; set; } 17 } 18 19 public partial class Count 20 { 21 [JsonProperty("bestScore")] 22 public long BestScore { get; set; } 23 24 [JsonProperty("name")] 25 public string Name { get; set; } 26 } 27 28 public partial class UserData 29 { 30 public static UserData FromJson(string json) => JsonConvert.DeserializeObject<UserData>(json, QuickType.Converter.Settings); 31 } 32 33 public static class Serialize 34 { 35 public static string ToJson(this UserData self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings); 36 } 37 38 internal static class Converter 39 { 40 public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings 41 { 42 MetadataPropertyHandling = MetadataPropertyHandling.Ignore, 43 DateParseHandling = DateParseHandling.None, 44 Converters = 45 { 46 new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal } 47 }, 48 }; 49 } 50} 51

json

1{ 2 "count": { 3 "aaa": { 4 "bestScore": 111, 5 "name": "hogehoge" 6 }, 7 "bbb": { 8 "bestScore": 222, 9 "name": "fugafuga" 10 } 11 }, 12 "score": { 13 "aaa": { 14 "bestScore": 11111111, 15 "name": "hogehoge" 16 }, 17 "bbb": { 18 "bestScore": 22222222, 19 "name": "fugafuga" 20 } 21 } 22}

以下のExceptionが発生してしまいました。

Unable to find a constructor to use for type UserData. A class should either have a default constructor, one constructor with arguments or a constructor marked with the JsonConstructor attribute. Path 'score', line 1, position 9

なぜAndroidの実機のみ例外が発生してしまうのか謎で困っております。

#試したこと
JsonConstructor attributeを付けたコンストラクタを作成してみましたが
同じExceptionが発生いたしました。

Unityエディター上では問題なく動作いたしました。
またIOS実機でも問題なく動作いたしました。
Android実機のみ例外が発生いたします。

#補足情報
PC:MacBook Pro (16-inch, 2019)
macOS:10.15.3(19D76)

確認端末:HTC U12+、XperiaXP
AndroidOS:9.0(Pie)、8.0(Oreo)

Unity:2019.2.10f1
Android Studio:3.5
Android SDK Build-Tools:29.0.2のみインストール
NDK:20.1.5948944のみインストール
Android Emulator:29.3.4
Android SDK Platform-Tools:29.0.5
Android SDK Tools:26.1.1
上記以外はSDKマネージャーでインストールしておりません。

JAVA JDK:jdk-8u241-macosx-x64.dmgをインストール

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

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

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

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

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

guest

回答2

0

Project setting -> Player -> Configuration -> Scripting Backend の設定をMono に設定すると動作すると思います。

エラーになる原因としては、ストリッピング処理でコンストラクタが削除された事が考えらます。
IL2CPP を使用する場合は、Link.xml で削除されないように明示的に指定する必要があります。

投稿2023/10/01 13:13

kamikaze.cappa

総合スコア558

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

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

0

引数を取らないデフォルトコンストラクタを追加してみてはいかがでしょうか。

C#

1public partial class UserData 2{ 3 // 引数を取らないデフォルトコンストラクタを追加してみてはいかがでしょうか。 4 public UserData(){} 5 6 [JsonProperty("count")] 7 public Dictionary<string, Count> Count { get; set; } 8 9 [JsonProperty("score")] 10 public Dictionary<string, Count> Score { get; set; } 11}

投稿2020/02/28 05:06

編集2020/02/28 05:06
quadii.shii

総合スコア257

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問