Json을 사용하여 두 가지 데이터 유형이 될 수 있는 JSON 속성을 역직렬화하는 방법.그물
Json을 쓰고 있어요.현재 진행 중인 프로젝트의 NET.외부 API에서 오브젝트인 속성을 가진 JSON을 수신하고 있지만, 비어 있으면 false가 전달됩니다.
예를 들어 다음과 같습니다.
data: {
supplier: {
id: 15,
name: 'TheOne'
}
}
다음과 같은 경우도 있습니다.
data: {
supplier: false
}
공급업체가 공급업체 개체 또는 null로 역직렬화되도록 공급업체 속성을 정의하려면 어떻게 해야 합니까?
현재 저는 다음을 가지고 있습니다.
public class Data {
[JsonProperty("supplier")]
public SupplierData Supplier { get; set; }
}
public class SupplierData {
[JsonProperty("id")]
public int Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
}
그러나 이제 공급업체의 값이 '거짓'일 때 역직렬화하려고 하면 실패합니다.JSON 값이 'false'일 때 공급업체 속성을 null로 하고 싶습니다.
누가 이걸 어떻게 하는지 알았으면 좋겠어요.감사해요.
이 문제는 고객의 요구에 맞게 커스터마이즈하여 해결할 수 있습니다.SupplierData
class. 컨버터의 외관은 다음과 같습니다.
class SupplierDataConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(SupplierData));
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JToken token = JToken.Load(reader);
if (token.Type == JTokenType.Object)
{
return token.ToObject<SupplierData>();
}
return null;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
serializer.Serialize(writer, value);
}
}
이 기능을 사용하려면 다음 명령어를 추가하기만 하면 됩니다.[JsonConverter]
의 탓으로 돌리다Supplier
소유물Data
다음과 같은 클래스:
public class Data
{
[JsonProperty("supplier")]
[JsonConverter(typeof(SupplierDataConverter))]
public SupplierData Supplier { get; set; }
}
다음은 컨버터의 작동 시연입니다.이 데모에서는 다음 명령어를 포함하는 오브젝트가 있는 것을 전제로 하고 있습니다.data
당신이 질문한 JSON은 스스로 설 수 없기 때문입니다.저는 다음 클래스를 정의했습니다.RootObject
이 목적을 위해:
public class RootObject
{
[JsonProperty("data")]
public Data Data { get; set; }
}
실제 데모 코드는 다음과 같습니다.
class Program
{
static void Main(string[] args)
{
string json = @"
{
""data"":
{
""supplier"":
{
""id"": 15,
""name"": ""TheOne""
}
}
}";
Console.WriteLine("--- first run ---");
RootObject obj = JsonConvert.DeserializeObject<RootObject>(json);
DumpSupplier(obj.Data.Supplier);
json = @"
{
""data"":
{
""supplier"": false
}
}";
Console.WriteLine("--- second run ---");
obj = JsonConvert.DeserializeObject<RootObject>(json);
DumpSupplier(obj.Data.Supplier);
}
static void DumpSupplier(SupplierData supplier)
{
if (supplier != null)
{
Console.WriteLine("Id: " + supplier.Id);
Console.WriteLine("Name: " + supplier.Name);
}
else
{
Console.WriteLine("(null)");
}
Console.WriteLine();
}
}
위의 출력은 다음과 같습니다.
--- first run ---
Id: 15
Name: TheOne
--- second run ---
(null)
언급URL : https://stackoverflow.com/questions/20432166/how-to-deserialize-a-json-property-that-can-be-two-different-data-types-using-js
'source' 카테고리의 다른 글
add_action을 통해 인수를 함수에 전달할 수 있습니까? (0) | 2023.03.10 |
---|---|
Fetch Post 콜 후 리다이렉트 (0) | 2023.03.10 |
배열별로 정렬된 ID 배열을 가진 WP_쿼리 (0) | 2023.03.10 |
jq: 객체의 각 엔트리에 대한 인쇄 키와 값 (0) | 2023.03.10 |
네스트된ng클릭콜간의이벤트 전파를 취소하는 가장 좋은 방법은 무엇입니까? (0) | 2023.03.10 |