C#反序列化通过自定义代码将字符串作为字节数组自动反序列化为属性?

C#反序列化通过自定义代码将字符串作为字节数组自动反序列化为属性?,c#,.net,serialization,C#,.net,Serialization,我有一个以字节数组作为二进制属性的类 [System.Xml.Serialization.XmlAttributeAttribute(DataType="hexBinary")] public byte[] aValue { get { return this.aValueField; } set { this.aValueField= value; } } 数据本身

我有一个以字节数组作为二进制属性的类

[System.Xml.Serialization.XmlAttributeAttribute(DataType="hexBinary")]
    public byte[] aValue {
        get {
            return this.aValueField;
        }
        set {
            this.aValueField= value;
        }
    }
数据本身…对于aValue…在我试图在某些文件中反序列化的XML文件中有一个字符串

要反序列化,请执行以下操作:

XmlSerializer xml = new XmlSerializer(typeof(Data));
using (Stream reader = new FileStream(file, FileMode.Open))
{
     config = (Data)xml.Deserialize(reader);
}

问题是,XML文件中的数据有一个字符串,而不是一个字节[](但其他文件也有一个有效的字节[])。我不能更改输入文件数据,也不能将属性更改为字符串,对于处理的其他文件,它必须是字节[]。如果输入是字符串,是否有办法在反序列化过程中通过代码对该字段进行自定义转换,使用逻辑对字节[]进行自定义转换?这样它就不会出现异常,也不会得到类。

如果您可以在代码中区分字符串和字节[],您可以添加另一个属性来处理序列化,并使aValue XmlIgnore不会被反序列化,但仍将在bValue集中设置它

private string bValueField;

[System.Xml.Serialization.XmlIgnore]
public byte[] aValue { get; set; }

[System.Xml.Serialization.XmlAttribute("aValue")]
public string bValue
{
    get
    {
        return bValueField;
    }
    set
    {
        if (value.Contains("string identifier here")) // i.e. it's not a byte[]
        {
            aValue = new byte[] { };
            bValueField = value;
        }
        else // it's a byte[]
        {
            var formatter = new BinaryFormatter();
            using (var stream = new MemoryStream(Encoding.Unicode.GetBytes(value ?? "")))
            {
                aValue = (byte[])formatter.Deserialize(stream);
                bValueField = "not a string";
            }
        } 
    }
}

所以有时候是二进制的,有时候是字符串?你能在编辑中显示这两者的一个例子吗?它可能类似于“0000000000000000”或“Hello!”(Hello!需要先转换成二进制)我希望在一个特殊属性上有一种类似于“pre parser”的东西,这样我就可以单独使用这个类,但如果24小时内没有任何结果,这似乎是一个令人满意的答案。