API에 요청을 보내고 두 가지 응답이 있습니다.2 개의 JSON 응답에 대한 하나의 클래스
첫째 :
{"response": [{...}, {...}]}
둘째 : 나는 두 경우에 대한 하나 개의 클래스가
{"response": {"count": 0, "items": [{...}, {...}]}}
만들 수 있습니까? 나는 C#과 Json.NET을 사용한다.
API에 요청을 보내고 두 가지 응답이 있습니다.2 개의 JSON 응답에 대한 하나의 클래스
첫째 :
{"response": [{...}, {...}]}
둘째 : 나는 두 경우에 대한 하나 개의 클래스가
{"response": {"count": 0, "items": [{...}, {...}]}}
만들 수 있습니까? 나는 C#과 Json.NET을 사용한다.
예, 당신은 JSON 형식을 감지하고 같은 클래스 (들)로 역 직렬화 JsonConverter
사용자 정의를 사용할 수 있습니다 이쪽을 봐주세요. 아래는 두 형식을 모두 처리 할 수있는 변환기입니다. 그것은 당신이 List<Item>
으로 deserialize하려고한다고 가정합니다. 위의 출력 여기
class Item
{
public int Id { get; set; }
public string Name { get; set; }
}
class Program
{
static void Main(string[] args)
{
string json1 = @"
{
""response"" :
[
{ ""Id"" : 1, ""Name"" : ""Foo"" },
{ ""Id"" : 2, ""Name"" : ""Bar"" },
]
}";
DeserializeAndDump(json1);
string json2 = @"
{
""response"" :
{
""count"" : 2,
""items"" :
[
{ ""Id"" : 3, ""Name"" : ""Fizz"" },
{ ""Id"" : 4, ""Name"" : ""Buzz"" },
]
}
}";
DeserializeAndDump(json2);
}
private static void DeserializeAndDump(string json)
{
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.Converters.Add(new ItemListConverter());
List<Item> list = JsonConvert.DeserializeObject<List<Item>>(json, settings);
foreach (Item item in list)
{
Console.WriteLine("Id: " + item.Id + ", Name: " + item.Name);
}
}
}
됩니다 :
Id: 1, Name: Foo
Id: 2, Name: Bar
Id: 3, Name: Fizz
Id: 4, Name: Buzz
나는 LINQ to JSON과 비슷한 접근법 (변환기없이)을 사용한다. – eXit
첫 번째로 알고 계시지 않는 경우이 온라인 도구 http://json2csharp.com/을 사용하여 JSON 문자열에서 C# 클래스를 생성 할 수 있습니다. 두 개의 다른 클래스를 사용하는 것이 더 나을 수 있다고 생각합니다. 하나만 사용해야하는 특별한 이유가 있습니까?
'count'속성은 선택 사항입니다. 'items'속성은 첫 번째 응답과 비슷합니다. 하나의 객체를 만들 수 있다고 생각합니다. 그리고 나는 API로부터 어떤 응답이 반환되는지 알지 못합니다. – eXit
당신은 당신이 관심있는 속성을 선언하고 확장 데이터가 나머지를 할 수 있도록 JsonExtensionData
속성
public class CustomerInvoice
{
// we're only modifing the tax rate
public decimal TaxRate { get; set; }
// everything else gets stored here
[JsonExtensionData]
private IDictionary<string, JToken> _additionalData;
}
string json = @"{
'HourlyRate': 150,
'Hours': 40,
'TaxRate': 0.125
}";
var invoice = JsonConvert.DeserializeObject<CustomerInvoice>(json);
// increase tax to 15%
invoice.TaxRate = 0.15m;
string result = JsonConvert.SerializeObject(invoice);
// {
// 'TaxRate': 0.15,
// 'HourlyRate': 150,
// 'Hours': 40
// }
. Nifty.
확장 데이터를 직렬화 (또는 비 직렬화)하지 않으려면 은 ExtensionDataAttribute의 WriteData 및 ReadData 속성을 false로 설정하여 해당 기능을 사용하지 않도록 설정하십시오.
참조 : Json.NET 5.0 Release 7 – Immutable Collections
또는 사용자 정의 JsonConvert
, 그래서 Deserialize JSON not working with JSON.NET
두에 대해 하나 개의 클래스를 사용하고자하는 이유를 무엇 여기
는 변환기를 사용하는 방법을 보여주는 데모입니다 다른 API 응답? –JSON이 유효하지 않습니다. 당신은''응답 ''을 의미 했습니까? { "count": 0, "items": [...]}'? –
@AndrewWhitaker 당신 말이 맞아요. – eXit