我有以下课程
[XmlRoot]
public class AList
{
public List<B> ListOfBs {get; set;}
}
public class B
{
public string BaseProperty {get; set;}
}
public class C : B
{
public string SomeProperty {get; set;}
}
public class Main
{
public static void Main(string[] args)
{
var aList = new AList();
aList.ListOfBs = new List<B>();
var c = new C { BaseProperty = "Base", SomeProperty = "Some" };
aList.ListOfBs.Add(c);
var type = typeof (AList);
var serializer = new XmlSerializer(type);
TextWriter w = …Run Code Online (Sandbox Code Playgroud) 在这个问题上,我的斗智斗勇.我偶尔会从我的.Net 2.0 asmx Web服务中得到上述错误.我有适当的XmlInclude(),它只出现在有时 - 当我重建和更新网站时,它可能会显示,它可能不会,没有押韵或理由.如果我移动一些XmlIncludes(),重建并推送更改,则错误通常会消失.
在将所有内容转换为DLL的构建过程之前,我使用了良好的ol xcopy部署方法.然后发生了错误,但是我所要做的就是在定义所有XmlInclude()调用的文件中添加一个空格,IIS将重新编译,错误就会消失.
对于它的价值,有很多XmlIncludes定义,大约100左右.
有任何想法吗?
这是一个片段:
namespace Courses{
[Serializable]
[XmlInclude(typeof(UserToCourse)),
XmlInclude(typeof(UserToCourseCollection)),
// ...lots more....
XmlInclude(typeof(ReadOnlySearchResultsRecordset<UserToCourse, UserToCourseCollection>)),
XmlInclude(typeof(AllCoursesByTrainingProgramCollection)),
XmlInclude(typeof(StartupObject))]
public partial class ServiceCallResult{
//..snipped class def
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:重新排列XmlIncludes似乎使错误消失,但下次重新编译和重新部署时它可能会或可能不会返回.
编辑#2:好的,更多细节.通过更改web.config强制回收不能解决问题,也不会完全重新启动IIS.由于某种原因,我的日志没有正确写出,所以我还没有堆栈跟踪.
这次,2个特定方法发生了错误.我对global.asax进行了更改(尝试修复我的堆栈跟踪日志记录),重建并更新,并且两种方法中的一种开始工作.然后我将带有XmlIncludes的类拆分为2个部分类,重建,更新,两个方法再次开始工作.我不确定这是不是永久性修复,因为它是如此随机; 我将再次更新下一个构建周期.
编辑#3:绝对不是一个永久修复,我仍然没有挂钩到正确的位置来捕获完整的堆栈跟踪(虽然我的其他日志都工作正常).啊.我将在下一轮再次更新.
编辑#4:最后有一个堆栈跟踪.它不会在Visual Studio中捕获,也不会在我的global.asax中的全局异常处理程序中捕获.以下是直接从Web浏览器调用方法时显示的结果:
System.InvalidOperationException: There was an error generating the XML document. ---> System.InvalidOperationException: The type System.String[] may not be used in this context.
at System.Xml.Serialization.XmlSerializationWriter.WriteTypedPrimitive(String name, String ns, Object o, Boolean xsiType)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write1_Object(String n, String ns, Object o, Boolean isNullable, Boolean needType) …Run Code Online (Sandbox Code Playgroud) 我收到错误“{”类型 Device1 不是预期的。使用 XmlInclude 或 SoapInclude 属性指定静态未知的类型。"}"
目前我有:
public abstract class Device
{
..
}
public class Device1 : Device
{ ... }
[Serializable()]
public class DeviceCollection : CollectionBase
{ ... }
[XmlRoot(ElementName = "Devices")]
public class XMLDevicesContainer
{
private DeviceCollection _deviceElement = new DeviceCollection();
/// <summary>Devices device collection xml element.</summary>
[XmlArrayItem("Device", typeof(Device))]
[XmlArray("Devices")]
public DeviceCollection Devices
{
get
{
return _deviceElement;
}
set
{
_deviceElement = value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在做:
XMLDevicesContainer devices = new XMLDevicesContainer();
Device device = …Run Code Online (Sandbox Code Playgroud)