DataContractSerializer при xml сериализации затрагивает игнорируемые поля - C#

Узнай цену своей работы

Формулировка задачи:

Привет всем. Вот класс, который я сериализую:
    [DataContract]
    public class FileMetaInfo
    {
        [DataMember]
        public string Hash { get; set; }
        [DataMember]
        public string FileName { get; set; }
        [DataMember]
        public long Size { get; set; }
        [DataMember]
        public string Author { get; set; }
        [DataMember]
        public DateTime CreationDateTime { get; set; }
        [DataMember]
        public int DownloadsCount { get; set; }
 
        public int FileMetaInfoId { get; set; }
        public int StorageId { get; set; }
        public virtual Storage Storage { get; set; }
 
        public FileMetaInfo() { }
    }
json и yaml сериализация работают как нужно и не лезут в последние 3 поля. Storage находится в отношениях с FileMetaInfo 1 ко многим, поэтому попытка сериализовать это поле приведет к рекурсивному вызову друг друга. xml сериализация как ни крути лезет туда и получается то, что я описал выше Вот код сериализации:
    public class XmlPlugin : ISerializePlugin
    {
        public string Format { get; } = "xml";
 
        public void Serialize(T source, string path)
        {
            using (StreamWriter file = File.CreateText(path))
            {
                using (var writer = new XmlTextWriter(file))
                {
                    DataContractSerializer serializer = new DataContractSerializer(typeof(T));
                    serializer.WriteObject(writer, source);
                }               
            }
        }
    }
IgnoreDataMember не предлагайте, он тут не нужен да и не дает эффекта, я пробовал

Решение задачи: «DataContractSerializer при xml сериализации затрагивает игнорируемые поля»

textual
Листинг программы
_dbContext.Сonfiguration.EnableProxyCreation = false;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы