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即使你们这样做了,它仍然是“序列化的”。。。请原谅“二进制序列化”;-)你看到这个答案了吗