使用XmlWriter和XmlReader进行字符串到byte []的转换

时间:2016-08-01 16:10:03

标签: c#

我有两个方法XmlWriter和XmlReader 我有一个名为Thumbprint的byte []。在编写器中,我将它从byte []转换为字符串并将其写入我的Xml文件。这有效。我需要弄清楚如何从字符串中读回来并将其转换回byte [] 到目前为止,这是我的代码:

public void WriteXml(XmlWriter writer)
        {

            writer.WriteStartElement("agent");           


            writer.WriteStartElement("thumbprint");
            var encoding = new UnicodeEncoding();    
            if (Thumbprint != null)
            {
                string base64 = System.Convert.ToBase64String(encoding.GetBytes(Thumbprint.ToString()));
                writer.WriteCData(base64);
            }
            else
            { 
                writer.WriteEndElement();
            }
        }

public void ReadXml(XmlReader reader)
        {
            if (reader.IsStartElement("agent"))
            {    
                //
                // Read past <agent>
                //
                reader.Read();

                while (true)
                {
                    if (reader.IsStartElement("thumbprint"))
                    {
                         byte[] toDecodeByte = System.Convert.FromBase64String(Thumbprint.ToString());
                         Thumbprint = toDecodeByte;   
                    }
                    else
                    {
                        //
                        // Read </agent>
                        //
                        reader.MoveToContent();
                        reader.ReadEndElement();
                        break;
                    }
                }
            }
            else
            {
                throw new XmlException("Expected <agent> element was not present");
            }
        }

Xml输入:

<thumbprint>
    <![CDATA[UwB5AHMAdABlAG0ALgBCAHkAdABlAFsAXQA=]]>
</thumbprint>

1 个答案:

答案 0 :(得分:1)

当您不知道编码时,从字节数组转换为字符串的一般解决方案:

static string BytesToStringConverted(byte[] bytes)
{
    using (var stream = new MemoryStream(bytes))
    {
        using (var streamReader = new StreamReader(stream))
        {
            return streamReader.ReadToEnd();
        }
    }
}