Unity에 API를 위한 Json 받거나 보내기를 위한 기초를 편하게 만든다.

16274 단어 JSON도구Unity3D
서버가 원하는 json 형식을 만들어 보자.
아래 도구에 붙이기

예를 들어 ↓ 같은 json

{
  "err":"2",
  "Ranking":
  [ 
  {
    "number": "1",
    "shopId": "2006",
    "shopName":"川崎店",
    "totalMedal": "500",
    "homeFlg": "0"
  },
  {
    "number": "2",
    "shopId": "2006",
    "shopName":"都築店",
    "totalMedal": "500",
    "homeFlg": "1"
  }
  ],
  "message": 
  [
      "レイドボス襲来!",
      "生誕祭"
  ]
}

이런 느낌일 정도 자동 생성해 줍니다. 불필요한 소스를 잘라내거나 여러가지 설정할 수 있습니다


다음에 get set 라든지의 자동 프로퍼티가 있으면 Unity에서 public에 읽을 수 없게 되므로



대체하고 지우십시오.

json에서 class 변수를 사용하고 싶다면 위에 [Serializable]을 작성하십시오.
그리고 숫자는 왠지 전부 long이 되기 때문에 int 나름대로 고쳐

APIDEMO.cs
// <auto-generated />
//
// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
//
//    using EndAPIValue;
//
//    var getPlanetGroupRanking = GetPlanetGroupRanking.FromJson(jsonString);

namespace EndAPIValue
    using System;
    using System.Collections.Generic;

    using System.Globalization;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Converters;

    public partial class GetPlanetGroupRanking
    {
        [JsonProperty("err")]
        [JsonConverter(typeof(ParseStringConverter))]
        public int Err ;

        [JsonProperty("Ranking")]
        public List<Ranking> Ranking ;

        [JsonProperty("message")]
        public List<string> Message ;
    }

    [Serializable]
    public partial class Ranking
    {
        [JsonProperty("number")]
        [JsonConverter(typeof(ParseStringConverter))]
        public int Number ;

        [JsonProperty("shopId")]
        [JsonConverter(typeof(ParseStringConverter))]
        public int ShopId ;

        [JsonProperty("shopName")]
        public string ShopName ;

        [JsonProperty("totalMedal")]
        [JsonConverter(typeof(ParseStringConverter))]
        public int TotalMedal ;

        [JsonProperty("homeFlg")]
        [JsonConverter(typeof(ParseStringConverter))]
        public int HomeFlg ;
    }

    public partial class GetPlanetGroupRanking
    {
        public static GetPlanetGroupRanking FromJson(string json) => JsonConvert.DeserializeObject<GetPlanetGroupRanking>(json, EndAPIValue.Converter.Settings);
    }

    public static class Serialize
    {
        public static string ToJson(this GetPlanetGroupRanking self) => JsonConvert.SerializeObject(self, EndAPIValue.Converter.Settings);
    }

    internal static class Converter
    {
        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
        {
            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
            DateParseHandling = DateParseHandling.None,
            Converters =
            {
                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
            },
        };
    }

    internal class ParseStringConverter : JsonConverter
    {
        public override bool CanConvert(Type t) => t == typeof(int) || t == typeof(int?);

        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
        {
            if (reader.TokenType == JsonToken.Null) return null;
            var value = serializer.Deserialize<string>(reader);
            int l;

            throw new Exception("Cannot unmarshal type int");
        }

        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
        {
            if (untypedValue == null)
            {
                serializer.Serialize(writer, null);
                return;
            }
            var value = (int)untypedValue;
            serializer.Serialize(writer, value.ToString());
            return;
        }

        public static readonly ParseStringConverter Singleton = new ParseStringConverter();
    }
}

[JsonProperty("shopId")]
이런 것을 사용하고 싶다면,
http://www.newtonsoft.com/json으로 가서 zip을 다운로드하십시오.
zip 파일을 압축 해제하고 "Bin\Net20\Newtonsoft.json.dll"을 Unity의 Plugins 폴더에 복사합니다.

좋은 웹페이지 즐겨찾기