从C#中的base64反序列化对象

时间:2015-07-10 11:31:42

标签: c# json base64 deserialization json-deserialization

我有一个班级

[Serializable]
public class ExternalAccount
{
  public string Name { get;set;}      
}

我已将此转换为JSON,如此

{\"Name\":\"XYZ\"}

然后我用base64编码了JSON字符串

然后我通过电汇发送到网络API服务

我收到了base64编码的字符串,现在需要将其反序列化回上面的原始对象(ExternalAccount),所以我先做一个

byte[] byteArray = Convert.FromBase64String(base64EncodedExternalAccount);

下一步是什么?

我已经尝试过以下但是这会返回null ...

using (MemoryStream memoryStream = new MemoryStream(byteArrayToConvert))
 {
            BinaryFormatter binaryFormatter = new BinaryFormatter();

            // set memory stream position to starting point
            memoryStream.Position = 0;

            // Deserializes a stream into an object graph and return as a               object.
            return binaryFormatter.Deserialize(memoryStream) as ExternalAccount;
  }

任何指针/提示都非常感谢。

2 个答案:

答案 0 :(得分:13)

您可以尝试将字节数组转换回字符串(它将与您发送的JSON相同),然后反序列化为ExternalAccount对象。使用Newtonsoft JSON库,以下示例正确显示"某人"在控制台上:

class Program
{
    static void Main(string[] args)
    {
        var account = new ExternalAccount() { Name = "Someone" };
        string json = JsonConvert.SerializeObject(account);
        string base64EncodedExternalAccount = Convert.ToBase64String(Encoding.UTF8.GetBytes(json));
        byte[] byteArray = Convert.FromBase64String(base64EncodedExternalAccount);

        string jsonBack = Encoding.UTF8.GetString(byteArray);
        var accountBack = JsonConvert.DeserializeObject<ExternalAccount>(jsonBack);
        Console.WriteLine(accountBack.Name);
        Console.ReadLine();
    }
}

[Serializable]
public class ExternalAccount
{
    public string Name { get; set; }
}

答案 1 :(得分:2)

你需要从你收到的字节中提取字符串。

ticker

正如预期的那样,您的byte[] byteArray = Convert.FromBase64String(base64EncodedExternalAccount); string AccountInfo = System.Text.Encoding.UTF8.GetString(byteArray ); 字符串中会显示{\"Name\":\"XYZ\"}。现在你需要AccountInfo。您可以使用相同的模型Deserialize。你可以这样做:

ExternalAccount