JSON 문자열을 JSON 개체 c#으로 변환
데이터베이스에 다음 문자열이 저장되어 있습니다.
str = "{ "context_name": { "lower_bound": "value", "upper_bound": "value", "values": [ "value1", "valueN" ] } }"
이 문자열은 이미 JSON 형식이지만 JObject 또는 JSON 개체로 변환하려고 합니다.
JObject json = new JObject();
제가 한번 해봤는데json = (JObject)str;
캐스팅이 안 됐는데 어떻게 해요?
JObject
정의 메서드Parse
이 경우:
JObject json = JObject.Parse(str);
Json을 참조하는 것이 좋습니다.NET 문서
입력된 객체를 원하지 않거나 필요한 경우:
using Newtonsoft.Json;
// ...
dynamic json = JsonConvert.DeserializeObject(str);
또는 입력된 객체 시도:
using Newtonsoft.Json;
// single
Foo foo = JsonConvert.DeserializeObject<Foo>(str);
// or as a list
List<Foo> foos = JsonConvert.DeserializeObject<List<Foo>>(str);
이것은 동작합니다.
string str = "{ 'context_name': { 'lower_bound': 'value', 'pper_bound': 'value', 'values': [ 'value1', 'valueN' ] } }";
JavaScriptSerializer j = new JavaScriptSerializer();
object a = j.Deserialize(str, typeof(object));
tradoubler json의 결과를 클래스로 변환하기 위해 며칠 전에 처음으로 사용한 매우 강력한 도구로 json을 기반으로 한 강력한 클래스 베이스가 되는 또 다른 목표를 달성하는 흥미로운 방법이 있습니다.
간단한 도구입니다.json 소스 페이스트를 복사하면 몇 초 안에 강력한 유형의 클래스 json 지향 클래스가 생성됩니다.이렇게 하면 보다 강력하고 간단하게 사용할 수 있는 클래스를 사용할 수 있습니다.
다음과 같이 시도할 수 있습니다.
string output = JsonConvert.SerializeObject(jsonStr);
이 방법은JsonConvert
var result = JsonConvert.DeserializeObject<Class>(responseString);
JSon 문자열에 "단일 따옴표 대신 이중 따옴표"가 있고 다음 줄의 표시기로 \n이 있는 경우, 이는 적절한 JSon 문자열이 아니기 때문에 다음과 같이 삭제할 필요가 있습니다.
SomeClass dna = new SomeClass ();
string response = wc.DownloadString(url);
string strRemSlash = response.Replace("\"", "\'");
string strRemNline = strRemSlash.Replace("\n", " ");
// Time to desrialize it to convert it into an object class.
dna = JsonConvert.DeserializeObject<SomeClass>(@strRemNline);
API에서 특정 엔티티의 객체 목록을 가져오는 경우 응답 문자열은 다음과 같습니다.
[{"id":1,"nome":"eeee","username":null,"email":null},{"id":2,"nome":"eeee","username":null,"email":null},{"id":3,"nome":"Ricardo","username":null,"email":null}]
이 상황에서는 Jason 객체의 배열을 반복하여 c# 변수를 채울 수 있습니다.나는 그렇게 했다:
var httpResponse = await Http.GetAsync($"api/{entidadeSelecionada}");
List<List<string[]>> Valores = new();
if (httpResponse.IsSuccessStatusCode)
{
//totalPagesQuantity = int.Parse(httpResponse.Headers.GetValues("pagesQuantity").FirstOrDefault());
//Aqui tenho que colocar um try para o caso de ser retornado um objecto vazio
var responseString = await httpResponse.Content.ReadAsStringAsync();
JArray array = JArray.Parse(responseString);
foreach (JObject objx in array.Children<JObject>())
{
List<string[]> ls = new();
foreach (JProperty singleProp in objx.Properties())
{
if (!singleProp.Name.Contains("_xyz"))
{
string[] val = new string[2];
val[0] = singleProp.Name;
val[1] = singleProp.Value.ToString();
ls.Add(val);
}
}
Valores.Add(ls);
}
}
return Valores;
저는 @Andrei의 답변으로 이 문제를 해결했습니다.
이것은 JObject의 경우 단순 json 형식 데이터에 대해 작동되지 않습니다.아래의 json 포맷 데이터를 deserialize로 시도했지만 응답이 없었습니다.
이 Json을 위해서
{
"Customer": {
"id": "Shell",
"Installations": [
{
"id": "Shell.Bangalore",
"Stations": [
{
"id": "Shell.Bangalore.BTM",
"Pumps": [
{
"id": "Shell.Bangalore.BTM.pump1"
},
{
"id": "Shell.Bangalore.BTM.pump2"
},
{
"id": "Shell.Bangalore.BTM.pump3"
}
]
},
{
"id": "Shell.Bangalore.Madiwala",
"Pumps": [
{
"id": "Shell.Bangalore.Madiwala.pump4"
},
{
"id": "Shell.Bangalore.Madiwala.pump5"
}
]
}
]
}
]
}
}
string result = await resp.Content.ReadAsStringAsync();
List<ListView11> _Resp = JsonConvert.DeserializeObject<List<ListView11>>(result);
//List<ListView11> _objList = new List<ListView11>((IEnumerable<ListView11>)_Resp);
IList usll = _Resp.Select(a => a.lttsdata).ToList();
// List<ListViewClass> _objList = new List<ListViewClass>((IEnumerable<ListViewClass>)_Resp);
//IList usll = _objList.OrderBy(a=> a.ReqID).ToList();
Lv.ItemsSource = usll;
언급URL : https://stackoverflow.com/questions/22870624/convert-json-string-to-json-object-c-sharp
'programing' 카테고리의 다른 글
대응: Axios 네트워크 오류 (0) | 2023.04.04 |
---|---|
컨트롤러가 모듈 내에 있는 경우 AngularJs $scope가 정의되지 않았습니다. (0) | 2023.04.04 |
각도 GET 요청 오류(safari iOS에서만) (0) | 2023.04.04 |
비동기/대기 구문에서 거부하려면 어떻게 해야 합니까? (0) | 2023.04.04 |
React를 사용하여 여러 페이지 앱을 구축하는 방법 (0) | 2023.04.04 |