일부 단위 테스트의 경우 테스트중인 시스템의 입력으로 사용할 수있는 특정 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 }
}
}
};
답변
동적 (예 : Xamarin.iOS)을 사용할 수없는 환경이나 이전 유효한 답변에 대한 대안을 찾는 경우가 있습니다.
이러한 경우 다음을 수행 할 수 있습니다.
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
답변
속성에서 newtonsoft JObject를 만드는 간단한 방법입니다.
이것은 샘플 사용자 속성입니다.
public class User
{
public string Name;
public string MobileNo;
public string Address;
}
그리고 나는 newtonsoft JObject 에서이 속성을 원합니다.
JObject obj = JObject.FromObject(new User()
{
Name = "Manjunath",
MobileNo = "9876543210",
Address = "Mumbai, Maharashtra, India",
});
출력은 다음과 같습니다.
{"Name":"Manjunath","MobileNo":"9876543210","Address":"Mumbai, Maharashtra, India"}
답변
조만간 당신은 특별한 성격을 가진 재산을 갖게 될 것입니다. 인덱스 또는 인덱스와 속성의 조합을 사용할 수 있습니다.
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 라이브러리를 사용하고 다음과 같이 사용할 수 있습니다.
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 );