我必须使用外部给定的xml结构(很大)。我使用visual studio的xsd工具生成使用xml序列化程序应该序列化的类。由于我们从VS2010切换到VS2012 (但仍然针对XML4.0),我在反序列化XML时遇到了问题。我将其分解为以下代码:
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”,它就能工作。
现在我有以下问题:
更新:只有当变量是数组时才会出现问题。
亲切的问候
发布于 2013-05-02 14:40:18
好吧,第一颗子弹很简单:
因为.NET 4.5是过头安装,而不是并排安装.安装.NET 4.5时,您正在更改4.0程序集。针对4.0vs4.5的行为仅仅决定了IDE是否允许您引用4.5个特定的特性。即使以4.0为目标,一旦安装了4.5,您也会使用4.5实现,并使用与4.5相关的任何代码更改(bug修复、更改的行为和新的bug)。
https://stackoverflow.com/questions/16340870
复制相似问题