【问题标题】:Confusion using XmlSerializer with abstract data request混淆使用 XmlSerializer 和抽象数据请求
【发布时间】:2015-02-19 20:41:50
【问题描述】:

我是 C# 新手,这个问题似乎很可疑,但请多多包涵。我有一个XmlSerializer,在编写如下 (small code sn-p) 时可以完美运行:

 public static AbstractResponseMessageData Execute(AbstractRequestMessageData objRQ, string strComponent)
    {
        StreamWriter rqWriter = null;
        StreamReader rsReader = null;
        try
        {
            Cursor.Current = Cursors.WaitCursor;

            String requestType = objRQ.GetType().Name;
            MessageBox.Show(requestType);

            String xmlRequest = "";
            var serializer = new XmlSerializer(typeof(ARC_LOGONRQ));

不幸的是,由于ARC_LOGONRQ 是来自抽象数据请求的类型,它并不总是我需要的类型。我什至知道这是使第一个请求起作用的类型的唯一方法是在我的代码中使用MessageBox。我想我会简单地写这样的东西来规避这个问题:

Type acType = Type.GetType(requestType);

然后在我的序列化程序中使用acType 而不是ARC_LOGONRQ。然而,这会引发 “找不到类型或命名空间” 错误。将 ARC_LOGONRQ 替换为 objRQ.GetType()objRQ 也会引发相同的错误。

我不明白为什么在使用 acType 时会出现此错误,也不明白在不指定实际数据类型的情况下如何正确序列化 objRQ我不能这样做)。

非常感谢。

更多信息:
使用序列化器:

var serializer = new XmlSerializer(typeof(objRQ.GetType()));

我还收到 “找不到类型或命名空间” 错误。我认为这是因为 ARC_LOGONRQ 类型似乎是任意的,或者不在 System.

【问题讨论】:

    标签: c# xmlserializer typeof


    【解决方案1】:

    您始终可以通过调用GetType 来获取对象的Type。试试这个:

    var serializer = new XmlSerializer(objRQ.GetType());
    

    在编译时使用typeof 获取Type。在运行时使用GetType 获取Type

    【讨论】:

    • 看我的例子。从您的代码中删除 typeof()
    • 天哪。最简单的事情让我难过了一个小时。非常感谢。
    猜你喜欢
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2018-11-03
    • 1970-01-01
    • 2014-10-11
    • 1970-01-01
    相关资源
    最近更新 更多