标签: xmlinclude

如何动态添加XmlInclude属性

我有以下课程

[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 c# xml-serialization xmlinclude

25
推荐指数
2
解决办法
2万
查看次数

System.InvalidOperationException:类型[XYZ]可能不在此上下文中使用.BUG确认

在这个问题上,我的斗智斗勇.我偶尔会从我的.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)

c# asp.net asmx xmlinclude

5
推荐指数
1
解决办法
7058
查看次数

xml 序列化和继承类型

我收到错误“{”类型 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)

c# serialization xmlinclude xmlserializer inherited

0
推荐指数
1
解决办法
2675
查看次数