Я использую 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
Надеюсь, на этот раз все ясно. Спасибо