How to serialize byte array to XML using XmlSerializer in C#?

后端 未结 3 1267
野性不改
野性不改 2021-01-04 07:05

Say we have a struct that it\'s data is provided by un-managed byte array using Marshal.PtrToStructure.

The C# struct layout:

[StructLayout(LayoutKin         


        
相关标签:
3条回答
  • 2021-01-04 07:31

    The XmlSerializer by default will encode the byte arrays using base 64 encoding. If you use this site and paste in IzE=, and decode it, the result will be #1. You can change the encoding by setting the XmlElementAttribute.DataType. I'm not sure if [XmlElement(DataType = "string")] will work, but you can try it. Using [XmlElement(DataType = "hexBinary")] will generate the raw bytes.

    0 讨论(0)
  • 2021-01-04 07:53

    This is how I did it:

    public class MySerializableClass
    {
        private string dummy;
    
        [XmlElement("NaughtyXmlCharacters")]
        public string NaughtyXmlCharactersAsString
        {
           get 
           {
               return BitConverter.ToString(NaughtyXmlCharacters);
           }
           set
           {
               // without this, the property is not serialized.
               dummy = value;
           }
        }
    
        [XmlIgnore]
        public byte[] NaughtyXmlCharacters
        {
            get;
            set;
        }
    }
    

    The bytes are then formatted as hexadecimal values and separated with a minus sign: 00-AF-B1

    0 讨论(0)
  • 2021-01-04 07:56

    I got this to work using the following:

      public class MySerializableClass
      {   
        [XmlIgnore]
        public string NaughtyXmlCharactersAsString { get; set; }
    
        [XmlElement(ElementName = "NaughtyXmlCharacters", DataType = "hexBinary")]
        public byte[] NaughtyXmlCharactersAsBytes
        {
            get { return Encoding.UTF8.GetBytes(NaughtyCharactersAsString ?? string.Empty); }
            set { NaughtyXmlCharactersAsString = Encoding.UTF8.GetString(value); }
        }
    

    I would then only access the "AsString" version of the property.

    0 讨论(0)
提交回复
热议问题