tôi đã liệt kê một định nghĩa với C#, nơi tôi đang lưu trữ nó là giá trị như nhân vật, như thế này:Deserialize nhân vật json như liệt kê
public enum CardType
{
Artist = 'A',
Contemporary = 'C',
Historical = 'H',
Musician = 'M',
Sports = 'S',
Writer = 'W'
}
Tôi đang cố gắng để deserialize sử dụng JSON.NET, nhưng đến JSON được viết bằng cách sử dụng giá trị cHAR (string) thay vì giá trị int thuộc kiểu liệt kê, như thế này:
[{"CardType","A"},{"CardType", "C"}]
có thể xác định một số loại chuyển đổi mà sẽ cho phép tôi tự phân tích các char để enum giá trị?
Tôi đã thử tạo JsonConverter, nhưng không chắc chắn cách thực hiện, trong khi chỉ áp dụng cho thuộc tính này chứ không phải toàn bộ đối tượng được phân tích cú pháp. dưới đây là những gì tôi đã thử:
public class EnumerationConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
serializer.Serialize(writer, value);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Null)
{
return null;
}
int value = serializer.Deserialize<int>(reader);
return (CardType)value;
}
public override bool CanConvert(Type objectType)
{
return objectType.IsSubclassOf(typeof(string));
}
}
Logic có thể sai và tôi có thể khắc phục nhưng vấn đề là ReadJson() không được gọi.
CanConvert là, nhưng nó dường như kêu gọi tất cả các tài sản, không chỉ là một tài sản tôi xác định nó cho:
public class Card
{
private CardType type;
[JsonConverter(typeof(EnumerationConverter))]
public CardType Type
{
get { return type; }
set { type = value; }
}
}
Tôi chắc rằng tôi đã làm điều này không đúng nhưng đang gặp khó khăn khi tìm tài liệu về cách thực hiện việc này cho một trường duy nhất ...
Tôi đang thiếu gì?
Bạn có thể gửi một lớp mẫu trong đó có 'sở hữu CardType' nơi deserilization thất bại? – nemesv
u có thể đăng enum hoàn chỉnh. Tôi chắc chắn bạn không thể khai báo enum như bạn đã xác định ở trên – dharam
lớp được deserialized vào chỉ có một tài sản CardType để nhận được giá trị deserialized, không có gì trong đó khác với tuyên bố. Đối với giá trị enum, đó thực sự là định nghĩa đầy đủ của ENUM. lớp Card có một thuộc tính kiểu CardType để lưu trữ giá trị kiểu liệt kê. – SelAromDotNet