如何反序列化只是一个元素的soap响应?

时间:2017-06-14 19:35:27

标签: c# xml soap httpclient

所以,在我收到回复之后(在这种情况下,Tstring):

var theResult = response.Content.ReadAsStringAsync().Result;
using (var stringreader = new StringReader(theResult))
{
    var serializer = new XmlSerializer(typeof(T));
    var responseObj = (T)serializer.Deserialize(stringreader);
}

theResult是:

<string xmlns="http://tempuri.org/">Hello World</string>

当我执行Desrialize时,我得到一个例外。 <string xmlns='http://tempuri.org/'> was not expected.为内部异常,There is an error in XML document (2, 2).为消息。

我正在尝试将Hello World反序列化为字符串,或者当我有多个元素而不仅仅是根元素时反序列化为对象。当有一个拥有更多成员的根元素时,我想我已经弄明白了。

2 个答案:

答案 0 :(得分:1)

为了解决此问题,您需要使用默认命名空间创建序列化程序:

[XmlRoot( Namespace="urn:my-namespace" )]
public class MyClass
{
    public string MyField;
}


您可以在下面的链接中阅读更多内容:
https://msdn.microsoft.com/en-us/library/aa302290.aspx

例如,如果您使用的是Customer类,则可以为XmlSerialier定义特定的类名

index    Speaker          Date        ARI     Flesch    Kincaid  
0        Alan Greenspan   1996  15.234878  34.669383  14.533217   
1        Alan Greenspan   1997  16.235605  31.415163  15.335869    
11       Alan S. Blinder  2002  14.299481  41.847836  13.681203         
12       Alan S. Blinder  2003        NaN        NaN        NaN     
14       Alice M. Rivlin  1996  15.828971  33.394999  15.211662  

您可以在上面的链接中详细了解。

答案 1 :(得分:0)

由于您有一个根级别的数组,因此您的xml框架不正确。您必须允许xml阅读器允许片段。

            XmlSerializer xs = new XmlSerializer(typeof(AppConfig));
            XmlReaderSettings settings = new XmlReaderSettings();
            settings.ConformanceLevel = ConformanceLevel.Fragment;
            XmlReader reader = XmlReader.Create(filepath);
            AppConfig configData = (AppConfig)xs.Deserialize(reader);