programing

JObject를 사용하여 JSON을 즉시 생성

lastmoon 2023. 3. 23. 23:06
반응형

JObject를 사용하여 JSON을 즉시 생성

유닛 테스트의 일부에서는 테스트 대상 시스템의 입력으로 사용할 수 있는 특정 JSON 값(이 경우 레코드 앨범)을 축적할 수 있는 기능을 원합니다.

다음 코드가 있습니다.

var jsonObject = new JObject();
jsonObject.Add("Date", DateTime.Now);
jsonObject.Add("Album", "Me Against The World");
jsonObject.Add("Year", 1995);
jsonObject.Add("Artist", "2Pac");

이것은 정상적으로 동작합니다만, 저는 "매직 스트링" 구문을 별로 좋아하지 않습니다.또, 다음과 같은 JavaScript 의 expando-property 구문에 가까운 것을 선호합니다.

jsonObject.Date = DateTime.Now;
jsonObject.Album = "Me Against The World";
jsonObject.Year = 1995;
jsonObject.Artist = "2Pac";

음, 그럼 어때?

dynamic jsonObject = new JObject();
jsonObject.Date = DateTime.Now;
jsonObject.Album = "Me Against the world";
jsonObject.Year = 1995;
jsonObject.Artist = "2Pac";

를 사용할 수 있습니다.JObject.Parse작은따옴표로 구분된 JSON 텍스트를 제공합니다.

JObject  o = JObject.Parse(@"{
  'CPU': 'Intel',
  'Drives': [
    'DVD read/writer',
    '500 gigabyte hard drive'
  ]
}");

이것은 실제로 JSON이 된다는 장점이 있기 때문에 JSON이라고 읽힙니다.

또는 동적 테스트 데이터를 사용할 수 있습니다.JObject.FromObject인라인 오브젝트를 조작하여 제공합니다.

JObject o = JObject.FromObject(new
{
    channel = new
    {
        title = "James Newton-King",
        link = "http://james.newtonking.com",
        description = "James Newton-King's blog.",
        item =
            from p in posts
            orderby p.Title
            select new
            {
                title = p.Title,
                description = p.Description,
                link = p.Link,
                category = p.Categories
            }
    }
});

시리얼라이제이션에 관한 Json.net 매뉴얼

둘 다 아니다.dynamic,도 아니다JObject.FromObject솔루션은 유효한 C# 변수 이름이 아닌 JSON 속성이 있는 경우 다음과 같이 작동합니다."@odata.etag"테스트 케이스에서는 인덱서 이니셜라이저 구문을 사용하는 것이 좋습니다.

JObject jsonObject = new JObject
{
    ["Date"] = DateTime.Now,
    ["Album"] = "Me Against The World",
    ["Year"] = 1995,
    ["Artist"] = "2Pac"
};

초기화를 위한 별도의 동봉 기호 세트 포함JObject속성을 추가하면 인덱스 이니셜라이저가 기존 객체 이니셜라이저보다 읽기 쉬워집니다.특히 다음과 같은 복합 JSON 객체의 경우에는 더욱 그렇습니다.

JObject jsonObject = new JObject
{
    ["Date"] = DateTime.Now,
    ["Album"] = "Me Against The World",
    ["Year"] = 1995,
    ["Artist"] = new JObject
    {
        ["Name"] = "2Pac",
        ["Age"] = 28
    }
};

오브젝트 이니셜라이저 구문을 사용하는 경우 위의 초기화는 다음과 같습니다.

JObject jsonObject = new JObject
{
    { "Date", DateTime.Now },
    { "Album", "Me Against The World" },
    { "Year", 1995 }, 
    { "Artist", new JObject
        {
            { "Name", "2Pac" },
            { "Age", 28 }
        }
    }
};

Dynamic을 사용할 수 없는 환경도 있습니다(예: Xamarin.i).OS) 또는 지금까지의 유효한 답변에 대한 대체 방법을 찾고 있는 경우.

이 경우 다음 작업을 수행할 수 있습니다.

using Newtonsoft.Json.Linq;

JObject jsonObject =
     new JObject(
             new JProperty("Date", DateTime.Now),
             new JProperty("Album", "Me Against The World"),
             new JProperty("Year", "James 2Pac-King's blog."),
             new JProperty("Artist", "2Pac")
         )

상세한 것에 대하여는, http://www.newtonsoft.com/json/help/html/CreatingLINQtoJSON.htm 를 참조해 주세요.

조만간 특수 문자(예: Create-Date)를 가진 속성을 갖게 될 것입니다.속성 이름에는 하이픈을 사용할 수 없습니다.그러면 암호가 해독됩니다.이러한 시나리오에서는 인덱스를 사용하거나 인덱스와 속성의 조합을 사용할 수 있습니다.

dynamic jsonObject = new JObject();
jsonObject["Create-Date"] = DateTime.Now; //<-Index use
jsonObject.Album = "Me Against the world"; //<- Property use
jsonObject["Create-Year"] = 1995; //<-Index use
jsonObject.Artist = "2Pac"; //<-Property use

속성에서 Newtonsoft JObject를 만드는 간단한 방법입니다.

이것은 샘플 사용자 속성입니다.

public class User
{
    public string Name;
    public string MobileNo;
    public string Address;
}

뉴턴소프트 JObject에서 이 속성을 원합니다.

JObject obj = JObject.FromObject(new User()
{
    Name = "Manjunath",
    MobileNo = "9876543210",
    Address = "Mumbai, Maharashtra, India",
});

출력은 다음과 같습니다.

{"Name":"Manjunath","MobileNo":"9876543210","Address":"Mumbai, Maharashtra, India"}

뉴턴소프트 라이브러리를 사용하여 다음과 같이 사용할 수 있습니다.

using Newtonsoft.Json;



public class jb
{
     public DateTime Date { set; get; }
     public string Artist { set; get; }
     public int Year { set; get; }
     public string album { set; get; }

}
var jsonObject = new jb();

jsonObject.Date = DateTime.Now;
jsonObject.Album = "Me Against The World";
jsonObject.Year = 1995;
jsonObject.Artist = "2Pac";


System.Web.Script.Serialization.JavaScriptSerializer oSerializer =
         new System.Web.Script.Serialization.JavaScriptSerializer();

string sJSON = oSerializer.Serialize(jsonObject );

언급URL : https://stackoverflow.com/questions/18246716/creating-json-on-the-fly-with-jobject

반응형