개체에 deserialize하려고 시도하는 HttpRequest에서 반환되는 json 문자열이 있습니다. json에는 필자의 경우에는 필요하지 않은 루트 요소가 있습니다 (동일한 데이터를 사용하는 다른 응용 프로그램은 필요하지 않으므로 제거 할 수 없습니다). 이 작업을 수행하는 데 여러 가지 방법을 시도했지만 객체는 항상 null입니다. 시계 창에서 json이 요청에서 올바르게 리턴되고 있음을 볼 수 있습니다. 내가 누락 된 것에 대한 어떤 생각?JSON 역 직렬화 - 루트 요소를 무시 하시겠습니까?
내 코드는 다음과 같습니다.
여기에 비 직렬화하려고하는 객체가 있습니다.
public class BrandHeaderResponse
{
public BrandHeaderData brandHeaderData { get; set; }
}
public class BrandHeaderData
{
public dynamic Image { get; set; } //url and alt text
public string BackgroundColor { get; set; }
public string LiveText { get; set; }
}
여기에 코드
HttpResponseMessage response;
using (var request = new HttpRequestMessage(HttpMethod.Get, new Uri(url)))
{
response = await webClient.SendAsync(request, requestHeaders);
}
using (var stream = await response.Content.ReadAsStreamAsync())
{
using (var sr = new StreamReader(stream))
{
using (var reader = new JsonTextReader(sr))
{
var serializer = new JsonSerializer();
var data = serializer.Deserialize<T>(reader);
return data;
}
}
}
그리고 마지막으로, 여기에 JSON이입니다. 어떤 이유로 당신이 것을 피하고 싶은 경우에 나는 Dictionary<string, BrandHeaderData>
에 역 직렬화 할 수없는 어떤 이유가 표시되지 않습니다
{
"2000_banner":{
"ComponentName":"2000_banner",
"SchemaName":"Brand Banner",
"BrandName":"Rockport - Dummy Banner",
"LogoTextColor":"Dark",
"Image":{
"ImageUrl":"http://n.media.com/staging/24?w=153&h=64",
"AltText":"Burberry"
},
"LiveText":"This is dummy brand text for Rockport.",
"BackgroundColor":"E3D9CE"
}
}
역 직렬화하려는 루트 개체의 속성은 항상 ""2000_banner "'로 지정되거나 속성 이름이 변경 될 수 있습니까? 2) 루트 객체에 다른 속성이있을 수 있습니까? – dbc
이름이 바뀝니다. 그것은 객체의 id를 기반으로합니다. 사전 객체로 직렬화하고 거기에서 값을 가져올 수 있지만 하나의 노드 (x_banner) 만 포함하는 json 문자열에 대한 오버 헤드가 많이 걸릴 수 있습니다. 우리는 다른 모든 json 그래서 나는 그것을 재사용 할 수 있기를 바란다. 당분간, 나는 막혀 있지 않기 때문에 새로운 방법을 만들고 사전에 역 직렬화했다. – Rhonda