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
}
}
});
둘 다 아니다.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
'programing' 카테고리의 다른 글
클라이언트 라우팅(리액트라우터 사용) 및 서버 측 라우팅 (0) | 2023.03.23 |
---|---|
Angular에서 여러 컨트롤러를 사용하는 방법JS가 맞습니까? (0) | 2023.03.23 |
테이블을 변경하여 열의 기본값을 수정합니다. (0) | 2023.03.23 |
jQuery AJAX 문자 인코딩 (0) | 2023.03.23 |
get_the_id와 post->ID 대 the_id / get_post_meta (0) | 2023.03.23 |