我必須使用外部給出的xml結構(巨大)。 我使用Visual Studio的xsd工具生成應該使用xmlserializer序列化的類。 由於我們從VS2010切換到VS2012(但仍以.NET 4.0爲目標),所以在反序列化XML時遇到了問題。我打破了下來,下面的代碼:無法反序列化以前序列化的XML與c#xmlserializer
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: '無' 是無效的XmlNodeType。
它工作,如果我從XmlAttributeAttribute中刪除「DataType =整數」。
現在我有以下問題:
- 爲什麼安裝.NET4.5改變.NET4.0的行爲 - 程序?或者情況並非如此,我錯過了什麼? (在我安裝VS2012之前,這工作得很好!現在它既不在VS2010中,也不在VS2012中工作)
- 刪除數據類型聲明有哪些副作用?
- 哪些其他數據類型聲明也受到影響?我在生成的代碼中有很多這些聲明,不僅是整數(nonNegativeInteger,date等等)。
更新:只有當變量是數組時纔會出現問題。
親切的問候
我曾經有一次類似的錯誤,但問題不是.NET版本。 XML本身已經刪除了其中一個嵌套項目,並且ReadEndElement()會過早地讀取根結束標記。我首先會檢查XML內容本身的完整性。 – OnoSendai 2013-05-02 14:44:40
我檢查了這一點; XML似乎很好。我創建了一個小程序,只是做了上面的。如果我在只有.NET 4.0的機器上啓動它,它就可以工作。如果它有4.5,則失敗。 – Maroni 2013-05-02 16:09:19
我發現了一些看起來很相似的東西。通讀這一點,看看它是否有幫助。 http://stackoverflow.com/questions/14689305/serialization-breaks-in-net-4-5 – Dave 2013-05-02 16:27:57