Мои исследования показывают, что это ложное срабатывание. Есть похожий вопрос на ваш за два года go с несколькими ответами, которые приходят к аналогичному выводу, но я углубился в него немного подробнее.
Оригинал. NET Framework документация по сериализации указывает, что объект в целом помечен атрибутом [Serializable]
, а не свойство внутри него (ваша строка) в этом случае, но сам он не обращается напрямую к струны.
Тем не менее, похоже, что исходная версия. NET Core фактически не поддерживала атрибут [Serializable]
для двоичной сериализации до. NET Core 2.0. Однако в этом выпуске вы можете прочитать документацию , в которой System.String упоминается как поддерживаемый сериализуемый тип, хотя он по-прежнему рекомендует использовать другие платформы сериализации (см. Абзац под предупреждением в верхней части этой страницы) .
Основная документация. NET по сериализации разделена на несколько разных статей, но, опять же, вы можете увидеть, что в документе Basi c Serialization это снова указывает на то, что сам класс отмечен (а не свойство строки, хотя в примере оно имеет одно), но также указывает, что он будет успешно сериализован.
Согласно последней цитате:
[Serializable]
public class MyObject {
public int n1 = 0;
public int n2 = 0;
public String str = null;
}
И logi c из тех документов, которые будут записывать строку в соответствующее свойство и соответственно сериализовать.
MyObject obj = new MyObject();
obj.n1 = 1;
obj.n2 = 24;
obj.str = "Some String";
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("MyFile.bin", FileMode.Create, FileAccess.Write, FileShare.None);
formatter.Serialize(stream, obj);
stream.Close();
Таким образом, я бы сделал вывод, что это действительно ложное срабатывание, пока вы используете. NET Core 2.0, NET Standard 2.0 или новее с двоичной сериализацией и маркировкой этого класса используется внутри с атрибутом [Serializable]
. В противном случае проверьте требования инфраструктуры сериализации, которую вы используете, чтобы узнать, нужно ли ей какое-либо такое оформление атрибутов (например, Newtonsoft. Json не требует атрибутов [JsonProperty]
в свойствах, если вы не хотите указывать пользовательские имена для сериализованные свойства, и ему не нужны никакие атрибуты в самом классе).