C# .NET의 복잡한 JSON 오브젝트를 시리얼 해제하려면 어떻게 해야 하나요?
JSON 문자열이 있는데 역직렬화하려면 도움이 필요합니다.
난 아무 것도 안 통했어...이것은 JSON입니다.
{
"response": [{
"loopa": "81ED1A646S894309CA1746FD6B57E5BB46EC18D1FAff",
"drupa": "D4492C3CCE7D6F839B2BASD2F08577F89A27B4ff",
"images": [{
"report": {
"nemo": "unknown"
},
"status": "rock",
"id": "7e6ffe36e-8789e-4c235-87044-56378f08m30df",
"market": 1
},
{
"report": {
"nemo": "unknown"
},
"status": "rock",
"id": "e50e99df3-59563-45673-afj79e-e3f47504sb55e2",
"market": 1
}
]
}]
}
저는 수업의 예를 가지고 있지만, 그 수업들을 이용할 필요는 없습니다.저는 다른 수업을 듣는 것도 상관없습니다.
클래스는 다음과 같습니다.
public class Report
{
public string nemo { get; set; }
}
public class Image
{
public Report report { get; set; }
public string status { get; set; }
public string id { get; set; }
public int market { get; set; }
}
public class Response
{
public string loopa { get; set; }
public string drupa{ get; set; }
public Image[] images { get; set; }
}
public class RootObject
{
public Response[] response { get; set; }
}
제가 뉴턴소프트를 가지고 있다는 것을 말씀드리고 싶습니다.Json은 이미 사용하고 있기 때문에, 거기서 몇개의 기능을 사용할 수 있습니다.
이거 어떻게 해?
내 코드에 이렇게 쓰고 있는데 잘 작동하고 있어.
아래는 당신이 써야 할 코드입니다.
using System.Web.Script.Serialization;
JavaScriptSerializer oJS = new JavaScriptSerializer();
RootObject oRootObject = new RootObject();
oRootObject = oJS.Deserialize<RootObject>(Your JSon String);
다음과 같이 해야 합니다.
var jobject = JsonConvert.DeserializeObject<RootObject>(jsonstring);
json 문자열을 http://json2csharp.com/에 붙여넣어 클래스가 올바른지 확인할 수 있습니다.
C# 2010 이후를 사용하는 경우는, 다음의 다이나믹 타입을 사용할 수 있습니다.
dynamic json = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonstring);
그런 다음 점 표기법을 사용하여 동적 객체의 속성 및 배열에 액세스할 수 있습니다.
string nemo = json.response[0].images[0].report.nemo;
최초 설치newtonsoft.json
로 포장하다.Visual Studio
사용.NuGet Package Manager
다음 코드를 추가합니다.
ClassName ObjectName = JsonConvert.DeserializeObject < ClassName > (jsonObject);
시나리오가 있었는데 이게 도움이 됐어요
JObject
objParserd =JObject
.Parse(jsonString);
JObject
arrayObject1 = (JObject
objParserd["d"];
D
myOutput=JsonConvert
.Deserialize Object(비직렬화 객체)<D>
(array Object 1).ToString();
shareInfo는 클래스입니다.
public class ShareInfo
{
[JsonIgnore]
public readonly DateTime Timestamp = DateTime.Now;
[JsonProperty("sharename")]
public string ShareName = null;
[JsonProperty("readystate")]
public string ReadyState = null;
[JsonProperty("created")]
[JsonConverter(typeof(Newtonsoft.Json.Converters.UnixDateTimeConverter))]
public DateTime? CreatedUtc = null;
[JsonProperty("title")]
public string Title = null;
[JsonProperty("getturl")]
public string GettUrl = null;
[JsonProperty("userid")]
public string UserId = null;
[JsonProperty("fullname")]
public string Fullname = null;
[JsonProperty("files")]
public GettFile.FileInfo[] Files = new GettFile.FileInfo[0];
}
// POST request.
var gett = new WebClient { Encoding = Encoding.UTF8 };
gett.Headers.Add("Content-Type", "application/json");
byte[] request = Encoding.UTF8.GetBytes(jsonArgument.ToString());
byte[] response = gett.UploadData(baseUri.Uri, request);
// Response.
var shareInfo = JsonConvert.DeserializeObject<ShareInfo>(Encoding.UTF8.GetString(response));
public static void Main(string[] args)
{
string json = @" {
""children"": [
{
""url"": ""foo.pdf"",
""expanded"": false,
""label"": ""E14288-Passive-40085-2014_09_26.pdf"",
""last_modified"": ""2014-09-28T11:19:49.000Z"",
""type"": 1,
""size"": 60929
}
]
}";
var result = JsonConvert.DeserializeObject<ChildrenRootObject>(json);
DataTable tbl = DataTableFromObject(result.children);
}
public static DataTable DataTableFromObject<T>(IList<T> list)
{
DataTable tbl = new DataTable();
tbl.TableName = typeof(T).Name;
var propertyInfos = typeof(T).GetProperties();
List<string> columnNames = new List<string>();
foreach (PropertyInfo propertyInfo in propertyInfos)
{
tbl.Columns.Add(propertyInfo.Name, propertyInfo.PropertyType);
columnNames.Add(propertyInfo.Name);
}
foreach(var item in list)
{
DataRow row = tbl.NewRow();
foreach (var name in columnNames)
{
row[name] = item.GetType().GetProperty(name).GetValue(item, null);
}
tbl.Rows.Add(row);
}
return tbl;
}
public class Child
{
public string url { get; set; }
public bool expanded { get; set; }
public string label { get; set; }
public DateTime last_modified { get; set; }
public int type { get; set; }
public int size { get; set; }
}
public class ChildrenRootObject
{
public List<Child> children { get; set; }
}
사용하고 있는 것은 다음과 같습니다.
using System.Web.Script.Serialization;
...
public static T ParseResponse<T>(string data)
{
return new JavaScriptSerializer().Deserialize<T>(data);
}
이 문제를 해결하여 모든 속성에 퍼블릭세터를 추가하였습니다.이것은 역직렬화되어야 합니다.
다음과 같은 여러 개의 코드를 사용하여 문제를 해결할 수 있습니다.
public class Response
{
public string loopa { get; set; }
public string drupa{ get; set; }
public Image[] images { get; set; }
}
public class RootObject<T>
{
public List<T> response{ get; set; }
}
var des = (RootObject<Response>)Newtonsoft.Json.JsonConvert.DeserializeObject(Your JSon String, typeof(RootObject<Response>));
또, C#의 JSON 오브젝트를 해석해 사용하는 문제도 있었습니다.일부 라이브러리에서 동적 유형을 확인했지만 항상 속성이 있는지 확인하는 것이 문제였습니다.
결국 이 웹페이지를 발견하게 되어 많은 시간을 절약할 수 있었습니다.이것은 Newtonsoft 라이브러리에서 사용하는 JSON 데이터를 기반으로 강력한 유형의 클래스를 자동으로 생성하여 완벽하게 작동합니다.C# 이외의 언어에서도 동작합니다.
nuget 패키지를 사용할 수도 있습니다.Newtonsoft.JSON
이를 실현하기 위해:
JsonConvert.DeserializeObject<List<Response>>(yourJsonString)
언급URL : https://stackoverflow.com/questions/16339167/how-do-i-deserialize-a-complex-json-object-in-c-sharp-net
'programing' 카테고리의 다른 글
합계 및 tax_total Woocommerce 변경 (0) | 2023.03.15 |
---|---|
Javascript 긴 정수 (0) | 2023.03.15 |
Python의 JSON 어레이를 통한 루프 (0) | 2023.03.15 |
명령줄을 사용하여 JSON 개체의 항목을 계산하려면 어떻게 해야 합니까? (0) | 2023.03.15 |
WooCommerce:카트 품목에 대한 제품 변형 설명도 표시 (0) | 2023.03.15 |