Deserializing base64 encoded byte arrays return different results in 2 JSON.net library versions

前端 未结 2 1333
耶瑟儿~
耶瑟儿~ 2020-12-20 22:35
  JObject j = JObject.Parse(\"{\'responseArray\':\'AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA\'}\");

  byte[] r = j[\"responseArray\"].ToObject(JsonSerializer.C         


        
2条回答
  •  失恋的感觉
    2020-12-20 23:02

    The problem is that JObject has already parsed the AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA as a string (j["responseArray"].Type == JTokenType.String), so the j["responseArray"].ToObject isn't doing a de-base64.

    You have to parse it directly to a byte[], like:

    public class MyObject
    {
        public byte[] responseArray { get; set; }
    }
    
    MyObject cl = JsonConvert.DeserializeObject("{'responseArray':'AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA'}");
    

    Clearly you can do the Convert.FromBase64String "manually":

    JObject j = JObject.Parse("{'responseArray':'AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA'}");
    byte[] r = Convert.FromBase64String((string)j["responseArray"]);
    

提交回复
热议问题