Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Field is member of a type which is serializable but is of type which is not serializable

I'm developing a C# library with .NET Framework 4.7.

I want to convert the class ProductionOrderXmlFile into a XML file:

[Serializable]
public class Level
{
    [XmlElement("Id")]
    public byte Id { get; set; }
    [XmlElement("Name")]
    public string Name { get; set; }
    [XmlElement("CodeType")]
    public byte CodeType { get; set; }
    [XmlElement("CodeSourceType")]
    public byte CodeSourceType { get; set; }
    [XmlElement("HelperCodeType")]
    public byte HelperCodeType { get; set; }
    [XmlElement("HelperCodeSourceType")]
    public byte HelperCodeSourceType { get; set; }
    [XmlElement("PkgRatio")]
    public int PkgRatio { get; set; }
}

[Serializable]
public class VarData
{
    [XmlElement("VariableDataId")]
    public string VariableDataId { get; set; }
    [XmlElement("LevelId")]
    public byte LevelId { get; set; }
    [XmlElement("Value")]
    public string Value { get; set; }
}

/// <summary>
/// Class to load a production order from a xml file.
/// </summary>
[Serializable, XmlRoot("root")]
public class ProductionOrderXmlFile
{
    [XmlElement("ProductionOrderName")]
    public string ProductionOrderName { get; set; }
    [XmlElement("NumItems")]
    public int NumItems { get; set; }
    [XmlElement("ProductCode")]
    public string ProductCode { get; set; }
    [XmlElement("Reduction")]
    public float Reduction { get; set; }
    [XmlArray("Levels")]
    [XmlArrayItem("Level")]
    public List<Level> Levels { get; set; }
    [XmlArray("VariableDatas")]
    [XmlArrayItem("VariableData")]
    public List<VarData> VariableData { get; set; }
}

But in fields public List<Level> Levels { get; set; } and public List<VarData> VariableData { get; set; } I get the warning:

Warning CA2235 Field Levels is a member of type ProductionOrderXmlFile which is serializable but is of type System.Collections.Generic.List which is not serializable

And:

Warning CA2235 Field VariableData is a member of type ProductionOrderXmlFile which is serializable but is of type System.Collections.Generic.List which is not serializable

What do I need to do to avoid those warnings?

like image 414
VansFannel Avatar asked Dec 23 '22 06:12

VansFannel


1 Answers

Lose the [Serializable]. Just throw it away - all of them. XmlSerializer doesn't care about it, and you don't need it. It isn't helping you, and is causing this false-positive warning.

[Serializable] relates essentially just to BinaryFormatter, which usually isn't a good choice.

like image 156
Marc Gravell Avatar answered Dec 25 '22 19:12

Marc Gravell