首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能用c# XML序列化程序反序列化以前序列化的XML

问不能用c# XML序列化程序反序列化以前序列化的XML
EN

Stack Overflow用户
提问于 2013-05-02 14:36:21
回答 1查看 657关注 0票数 1

我必须使用外部给定的xml结构(很大)。我使用visual studio的xsd工具生成使用xml序列化程序应该序列化的类。由于我们从VS2010切换到VS2012 (但仍然针对XML4.0),我在反序列化XML时遇到了问题。我将其分解为以下代码:

代码语言:javascript
复制
using System.IO;
using System.Xml;
using System.Xml.Serialization;

using Microsoft.VisualStudio.TestTools.UnitTesting;


/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
[System.SerializableAttribute]
[System.Diagnostics.DebuggerStepThroughAttribute]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[XmlRootAttribute("DecoderParameter", Namespace = "", IsNullable = false)]
public class DecoderParameterType
{
    private string[] decoderUpdatePointsField;

    /// <remarks/>
    [XmlAttributeAttribute(DataType = "integer")]
    public string[] DecoderUpdatePoints
    {
        get
        {
            return this.decoderUpdatePointsField;
        }
        set
        {
            this.decoderUpdatePointsField = value;
        }
    }
}

[TestClass]
public class UnitTest1
{
    #region Public Methods and Operators

    [TestMethod]
    public void TestMethod1()
    {
        var fileName = "c:\\temp\\test.xml";

        var deserializer = new XmlSerializer(typeof(DecoderParameterType));

        var output = new DecoderParameterType { DecoderUpdatePoints = new[] { "5", "7", "9" } };

        using (var fs = new FileStream(fileName, FileMode.Create))
        {
            deserializer.Serialize(fs, output);
        }

        using (var sr = new XmlTextReader(fileName))
        {
            var myParameter = (DecoderParameterType)deserializer.Deserialize(sr);
        }
    }

    #endregion
}

此代码段除例外情况外将失败:

System.Xml.XmlException:'None‘是一个无效的XmlNodeType。

如果我从DataType中删除“XmlAttributeAttribute = integer”,它就能工作。

现在我有以下问题:

  • 为什么安装.NET4.5会改变.NET4.0程序的行为?或者不是这样,我错过了什么?(在我安装VS2012之前,它运行得很好!现在它既不在VS2010中,也不在VS2012工作中)
  • 数据类型声明的删除有哪些副作用?
  • 哪些其他数据类型声明也会受到影响?我在生成的代码中有很多这样的声明,而不仅仅是整数(nonNegativeInteger、date等)。

更新:只有当变量是数组时才会出现问题。

亲切的问候

EN

回答 1

Stack Overflow用户

发布于 2013-05-02 14:40:18

好吧,第一颗子弹很简单:

  • 为什么安装.NET4.5会改变.NET4.0程序的行为?

因为.NET 4.5是过头安装,而不是并排安装.安装.NET 4.5时,您正在更改4.0程序集。针对4.0vs4.5的行为仅仅决定了IDE是否允许您引用4.5个特定的特性。即使以4.0为目标,一旦安装了4.5,您也会使用4.5实现,并使用与4.5相关的任何代码更改(bug修复、更改的行为和新的bug)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16340870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档