我有如下类和我无法更改的类,因为这些类已有近20多年的历史了,并且已经在生产中被许多应用程序使用。 这是由团队维护的,在我去找他们进行改变之前,我认为这将是一个巨大的改变,我需要确保我探索所有选项。
[Serializable]
public class MyDTO
{
public string FullName {get;set;}
public List<Address> Addresses {get;set}
}
// Note: It is not marked as Serializable
public class Address
{
public string FullAddress {get;set;}
}
我正在如下创建MyDTO
List<Address> myAddresses = new List<Address>()
{
new Address() { FullAddress =" FullAddress1"},new Address() { FullAddress =" FullAddress2"}
}
MyDTO dto = new MyDTO()
{
FullName = "FullName",Addresses = myAddresses
}
现在我正尝试将dto转换为byte [],如下所示。
public byte[] SerializeToByteArray(MyDTO dto)
{
byte[] byteArray = null;
BinaryFormatter bf = new BinaryFormatter();
using (MemoryStream ms = new MemoryStream())
{
bf.Serialize(ms,dto);
byteArray = ms.ToArray();
}
return byteArray;
}
我正在因为 在程序集“ xxx.yyy.zzz,版本= 1.0.0.0,区域性=中性,公共密钥令牌=空”中的类型“ xxx.Address”未标记为可序列化。
任何人都可以告诉我如何在不将地址设置为可序列化的情况下解决此问题。 我需要将dto转换为byte []
谢谢。
更新1
我尝试了@Neil在评论中提出的建议,现在我的最初问题已解决(我认为是),但是我遇到了新问题,所以我觉得自己在做错了。
这就是我现在正在做的
public byte[] SerializeToByteArray<T>(T dto)
{
byte[] byteArray = null;
BinaryFormatter bf = new BinaryFormatter();
using (MemoryStream ms = new MemoryStream())
{
bf.Serialize(ms,dto);
byteArray = ms.ToArray()
}
return byteArray;
}
string jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(dto);
byte[] byteArray = SerializeToByteArray(jsonString);
string dtoByteArrayBase64String = Convert.ToBase64String(byteArray);
我将dtoByteArrayBase64String发送到服务器端,并且正在接收它。 在服务器上,我尝试重新创建MyDTO对象,如下所示:
byte[] inputDTOByteArray = Convert.FromBase64String(dtoByteArrayBase64String);
MyDTO myDTO = DeserializeFromByteArray<MyDTO>(inputDTOByteArray);
public T DeserializeFromByteArray<T>(byte[] byteArray)
{
T dto;
BinaryFormatter bf = new BinaryFormatter();
using (MemoryStream ms = new MemoryStream(byteArray))
{
object obj = bf.Deserialize(ms);
dto = (T)obj; // getting error here
}
return dto;
}
我遇到错误 无法将类型为“ System.String”的对象转换为类型为“ MyDTO”。