C#: Почему строки и списки не поддерживают сериализацию? - PullRequest
0 голосов
/ 06 марта 2020

Я использую C# 8 с включенными новыми функциями, имея такой фрагмент кода:

[Serializable]
class Inner
{
    public readonly int mI;
    public readonly string s = "abc"; // doesn't compile
    public Inner(int i) { mI = i; }
}

[Serializable]
class Outter
{
    public readonly List<Inner> li = new List<Inner>() // doesn't compile
    {
        new Inner(2),
        new Inner(3)
    };
}

Не компилируется и говорит:

Поле s член типа Inner, который является сериализуемым, но имеет строку типа, которая не сериализуема.

и

Поле li является членом типа Outter, который сериализуем, но типа System.Collections.Generi c .List, который не сериализуем.

Так почему же в нем говорится, что «строка» не может быть сериализована, в чем проблема с моим кодом и как я могу это исправить ?


Я получаю эту ошибку, потому что в моем проекте установлено правило «Directory.build.target» для анализа кода, как показано ниже:

true 8.0 enable false

<PropertyGroup>
  <RootPath>$(MSBuildThisFileDirectory.TrimEnd("\").TrimEnd("/"))</RootPath>
  <OutputFolder>$(RootPath)/out</OutputFolder>
  <DropOutputFolder>$(OutputFolder)/drop</DropOutputFolder>
</PropertyGroup>

<PropertyGroup>
  <Include>xxxxx</Include>
  <ExcludeByAttribute>ObsoleteAttribute,GeneratedCodeAttribute,CompilerGeneratedAttribute</ExcludeByAttribute>
</PropertyGroup>

Ошибка анализатора кода:

Error   CA2235  Field li is a member of type Outter which is serializable but is of type System.Collections.Generic.List<NUnitTestProject_core.Inner> which is not serializable

Надеюсь, на этот раз все ясно. Спасибо

1 Ответ

0 голосов
/ 06 марта 2020

Я обнаружил, что размещение атрибута поля [NonSerialized] решит эту ошибку компиляции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...