代码之家  ›  专栏  ›  技术社区  ›  kevp

如何序列化没有值的整数元素?

  •  0
  • kevp  · 技术社区  · 7 年前

    我有一个XML元素,如下所示:

    <framerate_denominator nil="true"/>
    

    [XmlElement("framerate_denominator")]
    public int? FramerateDenominator;
    
    public bool ShouldSerializeFramerateDenominator() { return FramerateDenominator.HasValue; }
    

    我的代码如下:

    using Serialization;
    using System.IO;
    using System.Xml.Serialization;
    
    namespace SerializationSandbox
    {
        class Program
        {
            static void Main(string[] args)
            {
                // read
                Job job = null;
                string path = @"C:\sample_job.xml";
    
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(Job));
                using (StreamReader reader = new StreamReader(path))
                {
                    //EXCEPTION HERE
                    job = (Job)xmlSerializer.Deserialize(reader);
                    reader.Close();
                }
    
                // write
                xmlSerializer = new XmlSerializer(job.GetType());
                using (StringWriter textWriter = new StringWriter())
                {
                    xmlSerializer.Serialize(textWriter, job);
                    var text = textWriter.ToString();
                }
            }
        }
    }
    

    FormatException:输入字符串的格式不正确。

    nil="true" 属性值。有人有什么建议吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   shA.t Rami Jamleh    7 年前

    当我检查一些类似的问题并回答时,我可以建议改变 FramerateDenominator Job 课程目标:

    [XmlElement("framerate_denominator")]
    public string _FramerateDenominator { get; set; }
    
    [XmlIgnore]
    public int? FramerateDenominator
        => !string.IsNullOrEmpty(_FramerateDenominator) 
            ? (int?) int.Parse(_FramerateDenominator) 
            : null;