.Net SyndicationFeed ошибка сериализации при добавлении расширений в RSS-канал

Я создаю .NET Framework SyndicationFeed:

SyndicationFeed feed = SyndicationFeed.Load(xmlReader);

Затем создаю новый элемент:

var newItem = new SyndicationItem();
newItem.Id = sourceFeedItem.ItemID;
newItem.Title = new TextSyndicationContent(sourceFeedItem.ItemTitle);

Затем я добавляю несколько расширений элементов iTunes:

var iTunesExt = newItem.ElementExtensions;
iTunesExt.Add(new XElement("MyElement", "Whatever");
newItem.ElementExtensions.Add(iTunesExt);

Затем добавляю элемент в список items:

List<SyndicationItem> items = new List<SyndicationItem>();
items.Add(newItem);

и установите свойство Items фида.

feed.Items = items;

и, наконец, я записываю SyndicationFeed feed в XmlWriter.

feed.SaveAsRss20(xmlWriter);

Все идет хорошо, если расширения не добавлены, другими словами, если строка newItem.ElementExtensions.Add(iTunesExt); не выполняется. Но если строка выполняется, я получаю следующую ошибку при выполнении feed.SaveAsRss20(xmlWriter);.

Тип "System.ServiceModel.Syndication.SyndicationElementExtension" не может быть сериализован. Подумайте о том, чтобы пометить его атрибутом DataContractAttribute и пометить все его члены, которые вы хотите сериализовать, с помощью атрибута DataMemberAttribute. Если тип является коллекцией, подумайте о том, чтобы пометить его атрибутом CollectionDataContractAttribute.

Как я могу отметить iTunesExt атрибутом DataContractAttribute? Или я это неправильно понимаю?


person Howiecamp    schedule 16.07.2016    source источник


Ответы (1)


iTunesExt.Add(new XElement("MyElement", "Whatever");

Попробуйте изменить это на:

iTunesExt.Add(new XElement("MyElement", "Whatever"), 
    new DataContractSerializer(typeof(XElement)));

Это позволяет вам указать использование DataContractSerializer.

person Scott Hannen    schedule 16.07.2016
comment
теперь я получаю "An object of type 'System.Xml.Linq.XNodeReader' cannot be serialized at the top level for IXmlSerializable root type 'System.Xml.Linq.XElement' since its IsAny setting is 'true'. This type must write all its contents including the root element. Verify that the IXmlSerializable implementation is correct.". Я собираюсь сделать еще один ресурс, потому что я не совсем понимаю, я даже еще не понимаю ошибки. - person Howiecamp; 17.07.2016