JsonProperty attribute를 활용해서 클래스를 선언하고

json으로 직렬화 할 경우 순서를 보장받고 싶은 경우가 있습니다.

그럴경우, attribute 선언시 order 값을 지정해주면, 

json직렬화시 order값 순서대로 정렬이 가능합니다.

 

아래 코드를 확인해보면

Test1클래스의 각 멤버변수에 JsonProperty attribute를 지정해주고, order값을 정의해주었습니다.

속성 정의 순서가 달라도 order값을 지정해줄 경우 정렬해서 출력이 가능합니다.

 

또한, order 값은 음수 값도 포함해 작은 순서대로 정렬이 가능합니다.

(order = -3 과 같이 지정가능)

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.IO;
using System.Net;
using System.Runtime.Serialization;

namespace JsonFileWriteTest
{
    class Test1
    {
        [JsonProperty("@id", Order = 2)]
        public string ID { get; set; }
        [JsonProperty("@label", Order = 1)]
        public string Label { get; set; }
        [JsonProperty("@url",Order = 0)]
        public string URL { get; set; }
        
        [JsonProperty("@samplefield", Order = 3)]
        public string samplefield { get; set; }
    }

    public class Program
    {
        static void Main(string[] args)
        {
            Test1 test = new Test1()
            {
                ID = "TESTID",
                URL = "http://vmpo.tistory.com",
                Label = "label"
            };

            var djsonNull = JsonConvert.SerializeObject(test);

            var res = JObject.Parse(djsonNull);            

            Console.WriteLine(res);            

        }
    }
}

 

 

jsonProperty Attribute 를 제외하고 출력 할 경우,

아래와 같이 클래스 멤버변수 값 순서대로 정렬이 되어 직렬화됩니다.

하지만, 모든 경우에 멤버변수의 순서대로 직렬화 되는것을 보장하진 않기 때문에,

특정 순서대로 정렬이 필요할 경우, order값을 설정해주는 것이 좋습니다.

 

LIST
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기