【问题标题】:Azure Table Storage : Xml serialization for TableContinuationTokenAzure 表存储:TableContinuationToken 的 Xml 序列化
【发布时间】:2013-12-30 04:24:10
【问题描述】:

我正在使用 Microsoft.WindowsAzure.Storage v2.1.0.3。

尝试将 TableContinuationToken 序列化为 XML。

序列化代码为:

String tokenXml;
var serializer = new XmlSerializer(typeof(TableContinuationToken));
using (var writer = new StringWriter())
{
  var writerSettings = new XmlWriterSettings { OmitXmlDeclaration = true, NewLineChars = String.Empty };
  using (var xmlWriter = XmlWriter.Create(writer, writerSettings))
  {
    serializer.Serialize(xmlWriter, token);
  }
  tokenXml = writer.ToString();
}

反序列化代码为:

TableContinuationToken token; 
var serializer = new XmlSerializer(typeof(TableContinuationToken));
using (var stringReader = new StringReader(tokenXml))
{
  token = (TableContinuationToken)serializer.Deserialize(stringReader);
}

非常简单。但是当我尝试反序列化令牌时出现以下异常:

System.InvalidOperationException : There is an error in XML document (1, 26).
----> System.Xml.XmlException : Unexpected Element 'ContinuationToken'

从序列化令牌代码中删除标签后工作正常!

可能是 Microsoft.WindowsAzure.Storage v2.1.0.3 中的 BUG? 还是我做错了什么?

谢谢。

【问题讨论】:

    标签: azure xml-serialization azure-table-storage


    【解决方案1】:

    我刚刚遇到了这个问题。您必须在 TableContinuationToken 实例上使用 WriteXml()ReadXml() 方法,而不是使用您自己的 XmlSerializer 实例。

        public static string SerializeToken(TableContinuationToken token)
        {
            string serialized = null;
            if (token != null)
            {
                using (var writer = new StringWriter())
                {
                    using (var xmlWriter = XmlWriter.Create(writer))
                    {
                        token.WriteXml(xmlWriter);
                    }
                    serialized = writer.ToString();
                }
            }
    
            return serialized;
        }
    
        public static TableContinuationToken DeserializeToken(string token)
        {
            TableContinuationToken contToken = null;
            if (!string.IsNullOrWhiteSpace(token))
            {
                using (var stringReader = new StringReader(token))
                {
                    contToken = new TableContinuationToken();
                    using (var xmlReader = XmlReader.Create(stringReader))
                    {
                        contToken.ReadXml(xmlReader);
                    }
                }
            }
    
            return contToken;
        }
    

    我认为这是因为类和属性上的序列化属性,但我还没有验证这一点。我只知道提供的代码就是解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-10
      • 2014-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多