Xamarin: JSONのエンコード、デコード

概要

XamarinでJSONエンコード、デコードを行う。

依存関係

NuGetでSystem.Text.JSONを追加する必要があります。 f:id:shindo1687:20200416143150p:plain

*System.Text.JSONについては以下に説明があります。 docs.microsoft.com

サンプルコード

    public MainPage()
        {
            InitializeComponent();

            String jsonData = GetJsonData("SampleJSON.Sample.json");
            System.Console.WriteLine("jsonData = " + jsonData);  // A)

            UserData userData = JsonSerializer.Deserialize<UserData>(jsonData);
            System.Console.WriteLine("userData = " + userData);  // B)

            String jsonString = JsonSerializer.Serialize(userData);
            System.Console.WriteLine("jsonString = " + jsonString);  // C)
        }

        private String GetJsonData(String jsonFileName)
        {
            var assembly = typeof(MainPage).GetTypeInfo().Assembly;
            Stream stream = assembly.GetManifestResourceStream(jsonFileName);
            using (var reader = new System.IO.StreamReader(stream))
            {
                return reader.ReadToEnd();
            }
        }
A) 以下のJSONをプロジェクト内のリソースから読み込んでいます。
{
  "updated": "2020/01/01 00:00:00",
  "users": [
    {
      "name": "John",
      "age": 32,
      "delete": false
    },
    {
      "name": "Mike",
      "age": 29,
      "delete": true
    }
  ]
}
B) JSON文字列からデコードされたUserDataクラスのインスタンスToString()の結果が出力されます。
userData = {updated=2020/01/01 00:00:00, users=[{name=John, age=32, delete=False}{name=Mike, age=29, delete=True}]}

UserDataクラスは以下で定義されています。

    public class UserData
    {
        public string updated { get; set; }
        public IList<User> users { get; set; }

        public override string ToString()
        {
            string ret = "{updated=" + updated + ", users=[";
            foreach(var user in users)
            {
                ret += user.ToString();
            }
            ret += "]}";
            return ret;
        }
    }

    public class User
    {
        public string name { get; set; }
        public int age { get; set; }
        public bool delete { get; set; }

        public override string ToString()
        {
            return "{name=" + name + ", age=" + age + ", delete=" + delete + "}";
        }
    }
C) UserDataクラスのインスタンスJSONエンコードした結果の文字列が出力されます。
jsonString = {"updated":"2020/01/01 00:00:00","users":[{"name":"John","age":32,"delete":false},{"name":"Mike","age":29,"delete":true}]}

ソースコード

github.com