Типы, украшенные атрибутом [Serializable]
, имеют сериализованные поля , а не свойства (это [Serializable]
"контракт").Если сторонние типы используют автоматические свойства (как показано ниже), компилятор создаст поле с суффиксом k_BackingField, и это будет сериализовано.
Если вы не можете изменитьтипы в сторонней библиотеке, одна альтернатива будет использовать ту же библиотеку на клиенте.При создании прокси для службы (с помощью svcutil или Add Service Reference) вы можете ссылаться на стороннюю библиотеку, и сгенерированный клиент не будет создавать новые типы для контрактов, вместо этого повторно используя типы из библиотеки.Таким образом, вам не придется иметь дело с типами с публичными именами свойств _BackingField.
Автоматические свойства:
[Serializable]
public class MyType
{
public string MyProp { get; set; }
}
Компилятор превратит его во что-то похожее на
[Serializable]
public class MyType
{
private string <MyProp>k_BackingField;
public string MyProp
{
[CompilerGenerated]
get { return this.<MyProp>k_BackingField; }
[CompilerGenerated]
set { this.<MyProp>k_BackingField = value; }
}
}