Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 反序列化可空类型的最佳实践_C#_.net_Xml Serialization_Nullable - Fatal编程技术网

C# 反序列化可空类型的最佳实践

C# 反序列化可空类型的最佳实践,c#,.net,xml-serialization,nullable,C#,.net,Xml Serialization,Nullable,我想反序列化以下xml: <Root> <Order> <Id>12</Id> <Date>2013-03-28T16:12:45</Date> <Number></Number> <Amount></Amount> </Order> </Root> 我使用的反序列化程序

我想反序列化以下xml:

<Root>
    <Order> 
        <Id>12</Id>
        <Date>2013-03-28T16:12:45</Date>
        <Number></Number>
        <Amount></Amount>
    </Order>
</Root>
我使用的反序列化程序:

        public List<T> DeserializeList<T>(string filePath, string rootName)
        {
            var itemList = new List<T>();

            if (File.Exists(filePath))
            {
                var serializer = new XmlSerializer(typeof(List<T>), new XmlRootAttribute(rootName));
                TextReader reader = new StreamReader(filePath);
                itemList = (List<T>)serializer.Deserialize(reader);
                reader.Close();
            }

            return itemList;
        }
这是因为您不能简单地反序列化可为null的类型。 我在互联网上找到了多种解决方案来解决这个问题。但是它们看起来不太好,您必须为此编写大量代码


有什么优雅的解决方案吗?反序列化可为空类型的最佳实践是什么?

是否有特定的需要以您现有的特定方式使用XML

我这样问是因为如果您已经告诉XML反序列化程序元素数量可以为空,这意味着元素可能存在或不存在。因此,如果要生成XML,只需避免生成此元素即可

您可以看到,如果您有这样一个文件:

<Root>
    <Order> 
        <Id>12</Id>
        <Date>2013-03-28T16:12:45</Date>
        <Number></Number>
    </Order>
</Root>

12
2013-03-28 16:12:45

你可以用你的代码解析它,它会起作用。

看看这个问题——关于实现IXmlSerializable并实现它的答案yourself@Axarydax,我必须同意这一点,这是唯一有效的方法。不,输入xml总是有标记,但有时是emty。使用IsNullable,我刚刚尝试解决我的问题。
Input string was not in a correct format.
<Root>
    <Order> 
        <Id>12</Id>
        <Date>2013-03-28T16:12:45</Date>
        <Number></Number>
    </Order>
</Root>