1
JSON.NET은 deserializing hexadecimal numbers (예 : 0xffff
)을 지원하지만은 입니다.JSON.NET에서 정수를 16 진수로 serialize
다음 작품,하지만 너무 복잡한 것 같다
가 난 단지 정수에 대해, DateFormatHandling의 라인을 따라 뭔가를 찾고 있어요.
JSON.NET은 deserializing hexadecimal numbers (예 : 0xffff
)을 지원하지만은 입니다.JSON.NET에서 정수를 16 진수로 serialize
다음 작품,하지만 너무 복잡한 것 같다
가 난 단지 정수에 대해, DateFormatHandling의 라인을 따라 뭔가를 찾고 있어요.
주석에서 지적했듯이 16 진수 리터럴은 JSON에서 허용되지 않습니다 (JavaScript와 반대). 변환기
uint
값을 변환 반대 :public sealed class HexStringJsonConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return typeof(uint).Equals(objectType);
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteValue($"0x{value:x}");
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var str = reader.ReadAsString();
if (str == null || !str.StartsWith("0x"))
throw new JsonSerializationException();
return Convert.ToUInt32(str);
}
}
public sealed class CanonInfo
{
[JsonConverter(typeof(HexStringJsonConverter))]
public uint ModelId { get; set; }
[JsonConverter(typeof(HexStringJsonConverter))]
public uint FirmwareRevision { get; set; }
}
장면 변환은'JsonTextWriter'와 비교됩니다. JSON 형식은 16 진수를 지원하지 않으므로 문자열에 값을 넣을 것입니다. 당신이 가진 것은 다르게 작동합니다. – Romoku
그게 내가 아는 가장 쉬운 방법이야. 다른 옵션은'JsonTextWriter'를 서브 클래스 화하고 ['JsonTextWriter.WriteValue (Int32)'] (http://www.newtonsoft.com/json/help/html/M_Newtonsoft_Json_JsonTextWriter_WriteValue_10.htm)와 같은 메소드를 오버 라이딩하는 것입니다. 16 진수 형식 번호는 명시 적으로 [JSON 표준] (http://www.json.org/)에 위배됩니다 (공식 JSON 표현이없는 날짜와는 다릅니다 (http://www.newtonsoft.com/json/help/ html/datesinjson.htm)) 16 진수 형식 출력이 내장되어 있지 않을 수 있습니다. – dbc