将XML字符串反序列化为c#对象会导致可以为空的数据

时间:2017-02-08 15:12:27

标签: .net .net-core xmlserializer

反序列化将XML字符串转换为c#对象不起作用,因为我仍然可以获得可为空的值。 ErrorsRequestStatusVersion都显示空值。

在这里需要一只鹰眼,看看我有什么误解。我不是Dot Net框架的新手,但我是Dot Net Core的新手,所以也许我不了解不同的东西。

[XmlRoot(Namespace = "", ElementName = "Root", DataType = "string", IsNullable = true)]
public class GetAuthorizationTokenResponse
{
    public class RootDetail
    {
        public class RequestHeadDetail
        {
            [XmlElement("Errors")]
            public string Errors { get; set; }
            [XmlElement("RequestStatus")]
            public string RequestStatus { get; set; }
            [XmlElement("Version")]
            public string Version { get; set; }
        }

        [XmlElement("RequestHead")]
        public RequestHeadDetail RequestHead { get; set; } = new RequestHeadDetail();
    }

    [XmlElement("Root")]
    public RootDetail Root { get; set; } = new RootDetail();
}

var xmlResult = "<Root><RequestHead><Errors/><RequestStatus>0</RequestStatus><Version>2.3.2</Version></RequestHead></Root>";
var stringReader = new StringReader(xmlResult);
var test = (Ituran.GetAuthorizationTokenResponse)xmlSerializer.Deserialize(stringReader);

1 个答案:

答案 0 :(得分:0)

您的班级结构对应于:

<Root>
    <Root>
    …
    </Root>
</Root>

第一个<Root>元素对应GetAuthorizationTokenResponse类,第二个元素对应RootDetail类。要么删除其中一个,要么重新构建输入XML。