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

Object de-serializing from base64 in C#

我也有一个class

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

我已经把它转换成 JSON 像这样

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

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

然后我通过网络发送到网络 api 服务

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

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

下一步是什么?

我已经尝试了下面的方法,但是这个 returns 无效...

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;
  }

任何 pointers/tips 非常感谢。

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

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; }
}

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

byte[] byteArray = Convert.FromBase64String(base64EncodedExternalAccount);
string AccountInfo = System.Text.Encoding.UTF8.GetString(byteArray );

正如预期的那样,您将在 AccountInfo 字符串中得到 {\"Name\":\"XYZ\"}。现在你需要Deserialize。您可以使用相同的模型,ExternalAccount。你可以这样做:

ExnternalAccount model = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<ExnternalAccount>(AccountInfo );