use*_*475 2 c# serialization xml-serialization
有人可以帮助我解决一个奇怪的序列化问题吗?我在一个环境中遇到这个问题,并且在所有环境中都工作正常。但它在特定环境中失败了。所以我在这里指定为奇怪
代码
public SomeType[] Deserialize(string xml)
{
XmlSerializer serializer = new XmlSerializer(typeof(SomeType[]));
StringReader stringReader = new StringReader(xml);
SomeType[] types = (SomeType[])serializer.Deserialize(stringReader);
stringReader.Close();
return types;
}
Run Code Online (Sandbox Code Playgroud)
序列化 XML 数据:
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfSomeType>
<SomeType>
<Field1>val</Field1>
<Field2>val</Field2>
<Field3>val</Field3>
</SomeType>
</ArrayOfSomeType>
Run Code Online (Sandbox Code Playgroud)
例外的是:
System.InvalidCastException:无法将类型“SomeType[]”的对象强制转换为类型“SomeType”。
在 Microsoft.Xml.Serialization.GenerateAssembly.XmlSerializationWriterSomeType.Write11_SomeType(对象 o)
这里的错误是在Serialize你没有显示的方法中。你的Deserialize方法没有错误。下面的Serialize方法效果很好:
static string Serialize(SomeType[] values)
{
using (var sw = new StringWriter())
{
var serializer = new XmlSerializer(typeof(SomeType[]));
serializer.Serialize(sw, values);
return sw.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
如果我必须猜测的话,你有以下内容:
var serializer = new XmlSerializer(typeof(SomeType));
Run Code Online (Sandbox Code Playgroud)
如果您想要完全相同的输出而无需不必要的命名空间别名声明,请更改该方法以包括:
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("","");
serializer.Serialize(sw, values, ns);
Run Code Online (Sandbox Code Playgroud)
编辑显示当前代码工作正常:
using System;
using System.IO;
using System.Xml.Serialization;
public class SomeType
{
public string Field1 { get; set; }
public string Field2 { get; set; }
public string Field3 { get; set; }
}
public class MyTest
{
public static SomeType[] Deserialize(string xml)
{
XmlSerializer serializer = new XmlSerializer(typeof(SomeType[]));
StringReader stringReader = new StringReader(xml);
SomeType[] types = (SomeType[])serializer.Deserialize(stringReader);
stringReader.Close();
return types;
}
public static void Main()
{
string xml = @"<?xml version=""1.0"" encoding=""utf-8""?>
<ArrayOfSomeType>
<SomeType>
<Field1>val</Field1>
<Field2>val</Field2>
<Field3>val</Field3>
</SomeType>
</ArrayOfSomeType>";
var items = Deserialize(xml);
foreach (var item in items)
{
Console.WriteLine("{0}, {1}, {2}",
item.Field1, item.Field2, item.Field3);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6275 次 |
| 最近记录: |