【问题标题】:Convert base64 string to JSON .NET将 base64 字符串转换为 JSON .NET
【发布时间】:2021-03-04 13:45:34
【问题描述】:

我是 C# 新手,我有一个带有 base64 编码值的客户端请求。我正在尝试解码字符串并使用 JSON 对象。这是我调用来解码 base64 字符串的函数。

    public string FromBase64(string data)
    {
        if (string.IsNullOrEmpty(data)) return data;
        var bytes = Convert.FromBase64String(data);
        return UTF8Encoding.UTF8.GetString(bytes);
    }

如何将这个函数的返回值转换或修改为 JSON 以便解析它的值?

例如,现在对于输入值datae0tleSA6ICdhYmMnLCBpc0V4aXN0czogJ3RydWUnfQ==的值,当前输出为"{Key : 'abc', isExists: 'true'}"。 我想要的输出是{Key : 'abc', isExists: 'true'}

【问题讨论】:

  • 好吧,您现有的代码返回什么?我们不知道你的有效载荷是什么,所以我们不知道执行时会发生什么......
  • 你能举一个输入和预期输出的例子吗?
  • @MarcGravell 我已经更新了问题
  • @zinngg 你看到了什么不同?它们在我看来是一样的......
  • @zinngg 显然,您需要通过 JSON 反序列化器运行它;例如:gist.github.com/mgravell/c232664fd97fbbbdffc6560d1ed521fb

标签: c# json .net base64


【解决方案1】:

你有一个 base-64 字符串,你似乎是一个反序列化的对象;所以你需要多个步骤:

  • 将 base-64 解码为二进制
  • 将二进制文件解释为文本
  • 定义与预期数据匹配的对象模型
  • 将文本反序列化为对象模型

例如:

    static void Main()
    {
        var base64 = @"e0tleSA6ICdhYmMnLCBpc0V4aXN0czogJ3RydWUnfQ==";
        var blob = Convert.FromBase64String(base64);
        var json = Encoding.UTF8.GetString(blob);
        // string: "{Key : 'abc', isExists: 'true'}"
 
        var obj = JsonConvert.DeserializeObject<MyPayload>(json);
        Console.WriteLine(obj.Key);
        Console.WriteLine(obj.IsExists);
    }

    class MyPayload
    {
        public bool IsExists { get; set; }
        public string Key { get; set; }
    }

【讨论】:

    【解决方案2】:

    您将 base64 转换为字符串的代码工作正常,因此现在您需要创建一个与您的 JSON 对应的类并反序列化该方法的结果:

    var content = FromBase64(myBase64);
    var myObject = JsonSerializer.Deserialize<MyObject>(content);
    

    【讨论】:

      【解决方案3】:

      希望我正确理解了您的问题,这是我的通用方法的代码示例,该方法可以通过反序列化 base-64 字符串来创建 T 对象:

          public static T FromBase64<T>(string data)
          {
              if (string.IsNullOrEmpty(data))
              {
                  return default;
              }
              
              var bytes = Convert.FromBase64String(data);
              var parsedString = Encoding.UTF8.GetString(bytes);
              return JsonSerializer.Deserialize<T>(parsedString);
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-12
        • 1970-01-01
        • 2016-08-11
        • 2014-05-10
        • 2017-07-28
        • 2014-03-14
        • 2021-12-13
        • 1970-01-01
        相关资源
        最近更新 更多