Ошибка сериализации.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;

и наконец я пишу SyndicationFeedfeed для XmlWriter,

feed.SaveAsRss20(xmlWriter);

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

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

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

1 ответ

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

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

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

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

Другие вопросы по тегам