【问题标题】:Deserialize XML in C# - Return null on wrong format在 C# 中反序列化 XML - 在错误的格式上返回 null
【发布时间】:2011-09-18 13:37:06
【问题描述】:

我有以下想要反序列化的 XML 代码:

<a>
   <b> n/a </b>
</a>

现在 b 通常是一个整数,但有时“n/a”表示不可用。每当我反序列化上述 XML 时,我都会收到一个异常,指出我使用了错误的格式......什么是正确的。 但我需要 int 只是一个空值

public class a
{
    Nullable<int> b;
}

【问题讨论】:

    标签: c# xml serialization


    【解决方案1】:

    你可以这样做的唯一方法是使用类似的东西:

    [XmlIgnore]
    public int? B {get;set;}
    
    public bool ShouldSerializeBSerialized() {
        return B.HasValue;
    }
    [XmlElement("b")]
    public string BSerialized {
        get { return B.ToString(); }
        set {
           int tmp;
           if(value != null && int.TryParse(value.Trim(), out tmp))
           {
               B = tmp;
           }
        }
    }
    

    这里:

    • B 是我们将用来存储数据的int?
    • BSerialized 是处理解析等的 shim 属性
    • ShouldSerializeBSerialized 确保我们只序列化有效数据

    【讨论】:

    • +1 并删除了我说要做这样的事情的答案;只是我不关心代码。
    • 这就是我最终意识到的方式。非常感谢
    【解决方案2】:

    请看下面:

    Serialize a nullable int

    【讨论】:

    • 可以为 null 的 int 和具有非整数内容的元素是有区别的。这在这里不起作用(请参阅N/A
    • 你是对的:-)。我认为唯一的方法是编写一些代码来尝试解析 int
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    相关资源
    最近更新 更多