2016-07-16 8 views
0

내가 만들 확장을 추가 : 좀 아이튠즈 항목을 추가 그리고닷넷 SyndicationFeed 직렬화 오류가 때 .NET 프레임 워크 SyndicationFeed RSS 피드

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

:

다음
SyndicationFeed feed = SyndicationFeed.Load(xmlReader); 

내가 새 항목을 만들 확장 :

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; 

그리고 마침내 나는 SyndicationFeedfeedXmlWriter에 기록.

feed.SaveAsRss20(xmlWriter); 

는 모두 확장 newItem.ElementExtensions.Add(iTunesExt); 라인이 실행되지 않을 경우하지은 즉, 추가되는 경우에 잘 간다. 그러나 라인이 실행되면 feed.SaveAsRss20(xmlWriter); 실행시 다음 오류가 발생합니다.

유형 'System.ServiceModel.Syndication.SyndicationElementExtension' 직렬화 할 수 없습니다. DataContractAttribute 특성으로 표시하고 의 모든 구성원을 DataMemberAttribute 특성으로 직렬화하려는 경우를 고려하십시오. 유형이 모음 인 경우 CollectionDataContractAttribute로 표시하는 것이 좋습니다.

DataContractAttribute 속성으로 iTunesExt을 어떻게 표시 할 수 있습니까? 또는 나는 그것을 오해하고 있는가?

답변

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

이 수정 시도 : 당신이 DataContractSerializer의 사용을 지정할 수 있습니다

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

합니다.

+0

IsAny 설정이 'true'이므로 'System.Xml.Linq.XNodeReader'유형의 객체를 IXmlSerializable 루트 유형 'System.Xml.Linq.XElement'의 최상위 레벨에서 직렬화 할 수 없습니다. 이 형식은 루트 요소를 포함한 모든 내용을 작성해야하며 IXmlSerializable 구현이 올바른지 확인하십시오. 나는 내가 아직 오류를 이해하지 못하기 때문에 더 많은 자원을 할 것입니다. – Howiecamp