C# 使用C中其他类中定义的方法将对象转换为字节数组#
我有一个C# 使用C中其他类中定义的方法将对象转换为字节数组#,c#,C#,我有一个struct,它有一些字段。我需要一种方法来将这些字段转换为字节数组。我可以使用一个方法(“ObjectToByteArray”)。 我想知道如何使用它。我的代码正确吗 public struct Convertor { public string license { get; set; } public int Software { get; set; } public int StartDate { get; set; } public int End
struct
,它有一些字段。我需要一种方法来将这些字段转换为字节
数组。我可以使用一个方法(“ObjectToByteArray”)。
我想知道如何使用它。我的代码正确吗
public struct Convertor
{
public string license { get; set; }
public int Software { get; set; }
public int StartDate { get; set; }
public int EndDate { get; set; }
public byte Count { get; set; }
public int[] ActionCode { get; set; }
public byte[] ConvertToArray()
{
var Result=new Convertor();
return Result.ObjectToByteArray();
}
}
下面是一个使用结构的
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
和[Serializable()]
属性的示例
[Serializable()]
public struct Convertor
{
public string License { get; set; }
public int Software { get; set; }
public int StartDate { get; set; }
public int EndDate { get; set; }
public byte Count { get; set; }
public int[] ActionCode { get; set; }
public byte[] ConvertToArray()
{
var bf = new BinaryFormatter();
using (var mem = new MemoryStream())
{
bf.Serialize(mem, this);
return mem.ToArray();
}
}
public static Convertor ConvertFromArray(byte[] buffer)
{
var bf = new BinaryFormatter();
using (var mem = new MemoryStream(buffer))
{
return (Convertor)bf.Deserialize(mem);
}
}
/// <summary>
/// Checks for equality among <see cref="Convertor"/> classes
/// </summary>
/// <param name="other">The other <see cref="Convertor"/> to compare it to</param>
/// <returns>True if equal</returns>
public bool Equals(Convertor other)
{
return License == other.License
&& Software == other.Software
&& StartDate == other.StartDate
&& EndDate == other.EndDate
&& Count == other.Count
&& ActionCode.SequenceEqual(other.ActionCode);
}
}
class Program
{
static void Main(string[] args)
{
// Create a new object and add some data to it
var a = new Convertor()
{
License = "ABC001",
Software = 1,
StartDate = 2018,
EndDate = 2019,
Count = 16,
ActionCode = new[] { 67, 79, 68, 69, 49, 50, 51 }
};
// Serialize the object into a byte array
var buffer = a.ConvertToArray();
// Deserialize a new object from the byte array
var b = Convertor.ConvertFromArray(buffer);
// Check for equality
var ok = a.Equals(b); // ok = true
}
}
[Serializable()]
公共结构转换器
{
公共字符串许可证{get;set;}
公共int软件{get;set;}
公共int起始日期{get;set;}
公共int-EndDate{get;set;}
公共字节计数{get;set;}
public int[]操作码{get;set;}
公共字节[]ConvertToArray()
{
var bf=新的二进制格式化程序();
使用(var mem=new MemoryStream())
{
序列化(mem,this);
返回mem.ToArray();
}
}
公共静态转换器ConvertFromArray(字节[]缓冲区)
{
var bf=新的二进制格式化程序();
使用(var mem=新内存流(缓冲区))
{
返回(转换器)bf.反序列化(mem);
}
}
///
///检查类之间是否相等
///
///另一个比较它
///如果相等,则为True
公共布尔等于(转换器或其他)
{
return License==other.License
&&软件==其他。软件
&&StartDate==其他。StartDate
&&EndDate==其他.EndDate
&&计数==其他。计数
&&ActionCode.SequenceEqual(其他.ActionCode);
}
}
班级计划
{
静态void Main(字符串[]参数)
{
//创建一个新对象并向其中添加一些数据
var a=新转换器()
{
License=“ABC001”,
软件=1,
起始日期=2018年,
截止日期=2019年,
计数=16,
ActionCode=new[]{67,79,68,69,49,50,51}
};
//将对象序列化为字节数组
var buffer=a.ConvertToArray();
//从字节数组反序列化新对象
var b=转换器。ConvertFromArray(缓冲区);
//检查是否相等
var ok=a.Equals(b);//ok=true
}
}
您正在寻找非常广泛的主题“序列化”。@JPVenson-特别是二进制序列化。除非您想手动为每个字段调用位转换器.GetBytes()
。@ja72肯定;-)。还有一个很难回答的问题。@ja72即使你们这样做了,它仍然是“序列化的”。。。请原谅“二进制序列化”;-)你看到这个答案了吗