当前位置: 首页 > 知识库问答 >
问题:

XMLSerializer未反序列化XML

彭展
2023-03-14

我在尝试反序列化xml时收到以下错误。这会产生错误:

XmlSerializer serializer=新XmlSerializer(typeof(PrivateOptionsAPIResponse))
var result=序列化程序。反序列化(streamReader);

例外情况:

系统捕获到InvalidOperationException消息=XML文档(0,0)中有错误
InnerException:系统。Xml。XmlException消息=缺少根元素
源=系统。Xml

我不知道如何纠正这个问题。Request返回以下XML:

<代码>

我使用了xsd。exe生成一个类。PrivateOptionsAPIResponse(由xsd.exe工具生成)上的定义显示:

公共部分类PrivateOptionsAPIResponse{

private object itemField;

/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("CountiesForPostalCodeResponse", typeof(ZipCodeValidationResponse))]
[System.Xml.Serialization.XmlElementAttribute("PlanDetailsForIndividualOrFamilyResponse", typeof(IndividualPlanBenefitResponse))]
[System.Xml.Serialization.XmlElementAttribute("PlansForIndividualOrFamilyResponse", typeof(IndividualPlanQuoteResponse))]
[System.Xml.Serialization.XmlElementAttribute("ProductDetailsForSmallGroupResponse", typeof(SmallGroupProductBenefitResponse))]
[System.Xml.Serialization.XmlElementAttribute("ProductsForSmallGroupResponse", typeof(SmallGroupProductQuoteResponse))]
public object Item {
    get {
        return this.itemField;
    }
    set {
        this.itemField = value;
    }
}

}

如果我然后浏览到ZipCodeValidationACK定义,它会显示如下:

public partial class ZipCodeValidationResponse {

private CountyType[] countiesField;

/// <remarks/>
[System.Xml.Serialization.XmlArrayItemAttribute("County", IsNullable=false)]
public CountyType[] Counties {
    get {
        return this.countiesField;
    }
    set {
        this.countiesField = value;
    }
}

}

如果我浏览CountyType上的定义,我会看到:

public partial class CountyType {

private string countyNameField;

private StateAbbreviationType stateCodeField;

/// <remarks/>
public string CountyName {
    get {
        return this.countyNameField;
    }
    set {
        this.countyNameField = value;
    }
}

/// <remarks/>
public StateAbbreviationType StateCode {
    get {
        return this.stateCodeField;
    }
    set {
        this.stateCodeField = value;
    }
}

}

----------工作解决方案----------------:

using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
        {
            string status = ((HttpWebResponse)response).StatusDescription;

            if(status == "OK")
            {
                using (Stream responseStream = response.GetResponseStream())
                {
                    using (StreamReader reader = new StreamReader(responseStream))
                    {
                        var xmlSerializer = new XmlSerializer(typeof(PrivateOptionsAPIResponse));
                        var privateOptionsAPIResponse = xmlSerializer.Deserialize(reader) as PrivateOptionsAPIResponse;
                    }
                }                    
            }
        }

共有2个答案

越福
2023-03-14

首先,检查XML的格式是否有效。从给定的异常来看,似乎您提供的xml文档无效。如果您可以发布您试图反序列化的内容(xml),将不胜感激。

松嘉颖
2023-03-14

您如何声明您的stream Reader?查看它的内容,您很可能会发现它是空的或不包含完整的XML文档。

 类似资料:
  • 我想反序列化表单中的类: 其中文本是加密的,反序列化应该在重建TestFieldEncryptedMessage实例之前取消对值的加密。 我采用的方法非常类似于:https://github.com/codesqueak/jackson-json-crypto 也就是说,我正在构建一个扩展SimpleModule的模块: 如您所见,设置了两个修饰符:EncryptedSerializerModif

  • 假设我有一组a、B、C类: 公开A类:整数; 公共B类:整数;字符串地址; 公共类C:int orderNumber; 如何反序列化仅包含这些类但顺序未知的Json字符串(在Java中使用Gson)?例如: 非常感谢你!

  • 我正在尝试使用kryo序列化和反序列化到二进制。我想我已经完成了序列化,但似乎无法反序列化。下面是我正在处理的代码,但最终我想存储一个字节[],然后再次读取它。文档只显示了如何使用文件。

  • 问题内容: 在Apache Jackson和Jackson一起使用Apache Jersey进行JSON序列化时(在服务器和客户端上),在反序列化通用List时遇到问题。 我正在生成的JSON如下,“数据”中的所有3个类都实现“ CheckStatusDetail”: 产生此JSON的对象如下所示,我在客户端使用相同的类: 自从我将此注释添加到我的CheckStatusDetail接口后,就应用了

  • 添加到DTO对象后,我想向服务器发送一个列表 从…起 当向控制器发送对象时,它会抛出

  • 问题内容: 我尝试过在Java和Android之间实现跨平台序列化。我使用了Serializable,并将我的代码在Android中与台式机Java放在同一软件包中。 来源:java-desktop序列化 资料来源:Android-反序列化 学生是一类,实现了Serializable。在桌面上,我将学生实例序列化为“ thestudent.dat”。我将此文件放在Android设备上的SD卡上,并