在 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 );
我也有一个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 );