gpt4 book ai didi

C# 反序列化列表计数为零

转载 作者:数据小太阳 更新时间:2023-10-29 03:01:19 27 4
gpt4 key购买 nike

在正确反序列化我的类时遇到一些问题。

其他反序列化类工作正常并且在本质上看起来相似但是当反序列化器运行时,我得到 ErrorDetail 和 String 列表的 0 计数。

我错过了什么/做错了什么?

XML:

<PlaceOrderResponse
xmlns="http://blah.co.uk">
<PlaceOrderResult
xmlns:a="http://blah.co.uk/WebserviceMessage"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:ErrorDetails
xmlns:b="http://blah.co.uk/Error">
<b:ErrorDetail>
<b:Code>1fasd</b:Code>
<b:Message>Explain</b:Message>
</b:ErrorDetail>
</a:ErrorDetails>
<a:ID i:nil="true"/>
<a:InformationalMessages
xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/>
<a:Status>1</a:Status>
</PlaceOrderResult>
</PlaceOrderResponse>

C# 类:

[Serializable()]
[XmlRoot(ElementName = "PlaceOrderResponse", Namespace = "http://blah.co.uk", IsNullable = false)]
[XmlType(AnonymousType = true, Namespace = "http://blah.co.uk")]
public class PlaceOrderResponse
{
[XmlElement(ElementName = "PlaceOrderResult")]
public PlaceOrderResult placeOrderResult { get; set; }
}

[XmlRoot(ElementName = "PlaceOrderResult")]
public class PlaceOrderResult : WebserviceMessage { }

[XmlRoot(Namespace = "http://blah.co.uk/WebserviceMessage")]
[XmlType(AnonymousType = true)]
public class WebserviceMessage
{
[XmlArray("ErrorDetails")]
[XmlArrayItem("ErrorDetail", typeof(ErrorDetail))]
public ErrorDetails errorDetails { get; set; }
[XmlElement("ID")]
public string ID { get; set; }
[XmlArray("InformationMessages")]
[XmlArrayItem(typeof(String))]
public List<String> InformationMessages { get; set; }
[XmlElement("Status")]
public string Status { get; set; }
}

[XmlRoot(ElementName = "ErrorDetails")]
[XmlTypeAttribute(AnonymousType = true)]
public class ErrorDetails : List<ErrorDetail> { }

[XmlRoot(ElementName = "ErrorDetail", Namespace = "http://blah.co.uk/Error")]
[XmlTypeAttribute(AnonymousType = true)]
public class ErrorDetail
{
[XmlElement(ElementName = "Code")]
public string Code { get; set; }
[XmlElement(ElementName = "Message")]
public string Message { get; set; }
}

最佳答案

你的 XmlArrayItem将从其父级继承其命名空间。所以你需要明确地包括这个:

[XmlArrayItem("ErrorDetail", typeof(ErrorDetail), Namespace = "http://blah.co.uk/Error")].

关于信息性消息,没有要加载的字符串,因此很难判断 XML 应该 是什么样子。它将期望形式为 <string>message</string> 的元素

作为提示,调试这些问题的最简单方法是尝试相反的方法 - 创建一个对象并将其序列化为 XML。然后将其与您尝试反序列化的内容进行比较,您会发现很容易发现差异所在。

关于C# 反序列化列表计数为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34660922/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com