JSON 문자열을 C# 객체로 변환
JSON 문자열을 C#의 객체로 변환하려고 합니다.매우 간단한 테스트 케이스 사용:
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
object routes_list = json_serializer.DeserializeObject("{ \"test\":\"some data\" }");
문제는 routes_list가 설정되지 않고 정의되지 않은 개체라는 것입니다.좋은 생각 있어요?
아니면 Newtownsoft를 사용할 수도 있습니다.Json 라이브러리:
using Newtonsoft.Json;
...
var result = JsonConvert.DeserializeObject<T>(json);
어디에T
는 JSON 문자열과 일치하는 오브젝트 유형입니다.
원시 물체로 탈직렬화하려는 것 같네요변환할 개체를 나타내는 클래스를 만들 수 있습니다.이는 더 큰 객체 또는 JSON 문자열을 다룰 때 가장 유용합니다.
예:
class Test {
String test;
String getTest() { return test; }
void setTest(String test) { this.test = test; }
}
그러면 역직렬화 코드는 다음과 같습니다.
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
Test routes_list =
(Test)json_serializer.DeserializeObject("{ \"test\":\"some data\" }");
상세한 것에 대하여는, 이 튜토리얼을 참조해 주세요.http://www.codeproject.com/Tips/79435/Deserialize-JSON-with-Csharp.aspx
routes_list를 단순히 routes_list로 선언하고 싶지는 않을 것입니다.object
type. .test 속성이 없기 때문에 좋은 오브젝트를 찾을 수 없습니다.클래스 또는 구조체를 정의하거나 dynamic 키워드를 사용하는 것이 좋습니다.
이 코드가 실제로 기능하도록 하려면 DeserializeObject에서 반환된 객체가 string,object의 범용 사전임을 알아야 합니다.이 방법을 사용하는 코드는 다음과 같습니다.
var json_serializer = new JavaScriptSerializer();
var routes_list = (IDictionary<string, object>)json_serializer.DeserializeObject("{ \"test\":\"some data\" }");
Console.WriteLine(routes_list["test"]);
dynamic 키워드를 사용하는 경우는, 여기를 참조해 주세요.
클래스 또는 구조를 선언하면 다음과 같이 Deserialize Object 대신 Deserialize를 호출할 수 있습니다.
class MyProgram {
struct MyObj {
public string test { get; set; }
}
static void Main(string[] args) {
var json_serializer = new JavaScriptSerializer();
MyObj routes_list = json_serializer.Deserialize<MyObj>("{ \"test\":\"some data\" }");
Console.WriteLine(routes_list.test);
Console.WriteLine("Done...");
Console.ReadKey(true);
}
}
JavaScriptSerializer에서 동적 개체 사용.
JavaScriptSerializer serializer = new JavaScriptSerializer();
dynamic item = serializer.Deserialize<object>("{ \"test\":\"some data\" }");
string test= item["test"];
//test Result = "some data"
Newtonsoft는 Java 스크립트시리얼라이저보다 더 빠릅니다.이거는 뉴턴소프트 NuGet 패키지에 의존합니다.이 패키지는 일반적이고 기본시리얼라이저보다 우수합니다.
1개의 라인 코드솔루션
var myclass = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(Jsonstring);
Myclass oMyclass = Newtonsoft.Json.JsonConvert.DeserializeObject<Myclass>(Jsonstring);
Newtonsoft를 사용하면 당신의 요구를 쉽게 달성할 수 있습니다.Json 라이브러리아래에 한 가지 예를 적어 두겠습니다.
수신하는 개체 유형의 클래스:
public class User
{
public int ID { get; set; }
public string Name { get; set; }
}
코드:
static void Main(string[] args)
{
string json = "{\"ID\": 1, \"Name\": \"Abdullah\"}";
User user = JsonConvert.DeserializeObject<User>(json);
Console.ReadKey();
}
이것은 당신의 아들을 해석하는 매우 간단한 방법입니다.
여기 내가 여러 포스트에서 짜낸 간단한 수업이 있어.15분 정도 테스트했지만, 제 목적에 맞는 것 같습니다.사용하다JavascriptSerializer
이 게시물에 자세히 나와 있는 정보를 사용하여 앱에서 참조할 수 있습니다.
다음 코드를 LinqPad에서 실행하여 테스트할 수 있습니다.
- LinqPad 스크립트 탭을 마우스 오른쪽 버튼으로 클릭하고 "Query Properties"를 선택합니다.
- "시스템"을 참조합니다."추가 참조"의 Web.Extensions.dll
- "System"의 "Additional Namespace Imports"를 추가합니다.Web.스크립트시리얼화」를 참조해 주세요.
도움이 됐으면 좋겠다!
void Main()
{
string json = @"
{
'glossary':
{
'title': 'example glossary',
'GlossDiv':
{
'title': 'S',
'GlossList':
{
'GlossEntry':
{
'ID': 'SGML',
'ItemNumber': 2,
'SortAs': 'SGML',
'GlossTerm': 'Standard Generalized Markup Language',
'Acronym': 'SGML',
'Abbrev': 'ISO 8879:1986',
'GlossDef':
{
'para': 'A meta-markup language, used to create markup languages such as DocBook.',
'GlossSeeAlso': ['GML', 'XML']
},
'GlossSee': 'markup'
}
}
}
}
}
";
var d = new JsonDeserializer(json);
d.GetString("glossary.title").Dump();
d.GetString("glossary.GlossDiv.title").Dump();
d.GetString("glossary.GlossDiv.GlossList.GlossEntry.ID").Dump();
d.GetInt("glossary.GlossDiv.GlossList.GlossEntry.ItemNumber").Dump();
d.GetObject("glossary.GlossDiv.GlossList.GlossEntry.GlossDef").Dump();
d.GetObject("glossary.GlossDiv.GlossList.GlossEntry.GlossDef.GlossSeeAlso").Dump();
d.GetObject("Some Path That Doesnt Exist.Or.Another").Dump();
}
// Define other methods and classes here
public class JsonDeserializer
{
private IDictionary<string, object> jsonData { get; set; }
public JsonDeserializer(string json)
{
var json_serializer = new JavaScriptSerializer();
jsonData = (IDictionary<string, object>)json_serializer.DeserializeObject(json);
}
public string GetString(string path)
{
return (string) GetObject(path);
}
public int? GetInt(string path)
{
int? result = null;
object o = GetObject(path);
if (o == null)
{
return result;
}
if (o is string)
{
result = Int32.Parse((string)o);
}
else
{
result = (Int32) o;
}
return result;
}
public object GetObject(string path)
{
object result = null;
var curr = jsonData;
var paths = path.Split('.');
var pathCount = paths.Count();
try
{
for (int i = 0; i < pathCount; i++)
{
var key = paths[i];
if (i == (pathCount - 1))
{
result = curr[key];
}
else
{
curr = (IDictionary<string, object>)curr[key];
}
}
}
catch
{
// Probably means an invalid path (ie object doesn't exist)
}
return result;
}
}
tripletdad99의 말처럼
var result = JsonConvert.DeserializeObject<T>(json);
않은 에는 '만들어 주세요'로 수 .Dictionary
대신에
var result = JsonConvert.DeserializeObject<Dictionary<string, string>>(json_serializer);
프로젝트에 참조하기 위해 이 ddl을 추가합니다.시스템Web.Extensions.dll
다음 네임스페이스를 사용합니다.시스템 사용.Web.스크립트시리얼화
public class IdName
{
public int Id { get; set; }
public string Name { get; set; }
}
string jsonStringSingle = "{'Id': 1, 'Name':'Thulasi Ram.S'}".Replace("'", "\"");
var entity = new JavaScriptSerializer().Deserialize<IdName>(jsonStringSingle);
string jsonStringCollection = "[{'Id': 2, 'Name':'Thulasi Ram.S'},{'Id': 2, 'Name':'Raja Ram.S'},{'Id': 3, 'Name':'Ram.S'}]".Replace("'", "\"");
var collection = new JavaScriptSerializer().Deserialize<IEnumerable<IdName>>(jsonStringCollection);
Json을 복사하여 json2csharp 텍스트 상자에 붙여넣고 Generate 버튼을 클릭합니다.
다음과 같이 cs 파일을 사용하여 cs 클래스가 생성됩니다.
var generatedcsResponce = JsonConvert.DeserializeObject(yourJson);
서 ★★★★★RootObject
생성된 cs 파일의 이름입니다.
이러한 단계를 반자동화하는 또 다른 빠르고 쉬운 방법은 다음과 같습니다.
- 해석할 JSON을 가져와 여기에 붙여넣습니다.https://app.quicktype.io/ . 드롭 다운에서 언어를 C#으로 변경합니다.
- 왼쪽 상단의 이름을 클래스 이름으로 업데이트합니다. 기본값은 "시작"입니다.
- 비주얼 스튜디오에서 웹사이트 -> 패키지 관리로 이동하여 NuGet을 사용하여 Json을 추가합니다.뉴턴소프트의 인터넷입니다.
app.quicktype.io는 Newtonsoft에 기반한 직렬화 메서드를 생성했습니다.또는 다음과 같은 코드를 사용할 수 있습니다.
WebClient 클라이언트 = new WebClient();
문자열 myJSON = 클라이언트.Download String ("https://URL_FOR_JSON.com/JSON_STUP");
var myClass = Newtonsoft.Json.JsonConvert.deserialize Object(myJSON);
JSON 문자열을 C# 내의 객체로 변환합니다.아래 테스트 케이스를 사용합니다.나한테는 효과가 있었어요.여기서 "MenuInfo"는 C# 클래스 객체입니다.
JsonTextReader reader = null;
try
{
WebClient webClient = new WebClient();
JObject result = JObject.Parse(webClient.DownloadString("YOUR URL"));
reader = new JsonTextReader(new System.IO.StringReader(result.ToString()));
reader.SupportMultipleContent = true;
}
catch(Exception)
{}
JsonSerializer serializer = new JsonSerializer();
MenuInfo menuInfo = serializer.Deserialize<MenuInfo>(reader);
먼저 다음과 같은 라이브러리를 포함해야 합니다.
using System.Runtime.Serialization.Json;
DataContractJsonSerializer desc = new DataContractJsonSerializer(typeof(BlogSite));
string json = "{\"Description\":\"Share knowledge\",\"Name\":\"zahid\"}";
using (var ms = new MemoryStream(ASCIIEncoding.ASCII.GetBytes(json)))
{
BlogSite b = (BlogSite)desc.ReadObject(ms);
Console.WriteLine(b.Name);
Console.WriteLine(b.Description);
}
클래스 이 있다고 가정해봅시다.Student
을 사용하여 .Student Object
도 이렇게 쓸 수 요.JavaScriptSerializer
JSON의 C#입니다.std
JSON 자자다다다다다다다다.
public class Student
{
public string FirstName {get;set:}
public string LastName {get;set:}
public int[] Grades {get;set:}
}
public static Student ConvertToStudent(string std)
{
var serializer = new JavaScriptSerializer();
Return serializer.Deserialize<Student>(std);
}
또는 시스템을 사용할 수 있습니다.Text.Json 라이브러리:
using System.Text.Json;
...
var options = new JsonSerializerOptions()
{
PropertyNameCaseInsensitive = true
});
var result = JsonSerializer.Deserialize<List<T>>(json, options);
여기서 T는 JSON 문자열과 일치하는 개체 유형입니다.
System.Text.Json은 다음에서 사용할 수 있습니다.NET Core 2.0 이후NET Framework 4.6.1 이후
언급URL : https://stackoverflow.com/questions/4611031/convert-json-string-to-c-sharp-object
'programing' 카테고리의 다른 글
jQuery: 동기 AJAX 요청 수행 중 (0) | 2023.02.26 |
---|---|
WordPress에서 게시 날짜를 얻으려면 어떻게 해야 합니까? (0) | 2023.02.26 |
Oracle jdbc 드라이버 클래스의 차이점 (0) | 2023.02.26 |
'TS2532: Object is undefined' 오류를 해결하려면 어떻게 해야 합니까? (0) | 2023.02.26 |
그래들 잡으러요Spring Boot에 빌드 버전 (0) | 2023.02.26 |