【问题标题】:Error while deserializing using DataContactSerializer with C#使用带有 C# 的 DataContactSerializer 反序列化时出错
【发布时间】:2012-07-11 00:22:55
【问题描述】:
      private string DeSerialize(string studata)
    {
        dcs= new DataContractSerializer(typeof(string));
        try
        {
            using (var q = new StringReader(studata))
            {
                using (XmlReader reader = XmlReader.Create(sr))
                {
                   var k = dcs.ReadObject(reader);
                    return k.ToString();
                }
            }
        }
        catch
         {}
        return string.Empty;
    }

使用上述方法得到运行时错误“第 1 行位置 41 中的错误。期望来自命名空间 'http://schemas.microsoft.com/2003/10/Serialization/' 的元素 'string'.. 遇到 'Element'学生命名空间

【问题讨论】:

    标签: c# .net xml-serialization datacontractserializer


    【解决方案1】:

    当你序列化某些东西时,你将一个对象序列化为某种表示,例如 XML、JSON 等。如果表示不是二进制的,则序列化的结果可以存储在字符串中。

    您的代码正在尝试获取一个字符串并将其反序列化为一个字符串。这没有意义。

    线

    dcs= new DataContractSerializer(typeof(string));
    

    表示您要反序列化的序列化对象的类型是字符串类型。这可能不是你的意思。

    typeof(string) 更改为typeof(WhateverTypeIPreviouslySerialized)

    另外,DeSerialize 的返回类型是string。那也应该是WhateverTypeIPreviouslySerialized

    与核心问题无关,我会指出空捕获

        catch
         {}
    

    是不好的做法。它将掩盖正在抛出并需要处理的异常。如果您想在序列化失败时返回特定值,请将该值放在 catch 语句中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多