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
'C#' 카테고리의 다른 글
[c#] JsonConvert.SerializeObject ignore null field (json 직렬화 null 제외) (0) | 2019.10.23 |
---|---|
[C#] rest api 호출하기 (WebClient, WebRequest sample) (12) | 2019.10.21 |
최근댓글