反序列化XML (TFS oData)

本文关键字:oData TFS XML 反序列化 | 更新日期: 2023-09-27 18:01:16

我正在开发一个windows 8.1应用程序,几天来我一直在努力解决一个问题。这是我的问题:

我有一个tfs项目,通过我的应用程序,我想跟随它(显示状态,由创建,由改变等)使用tfs odata。

这是获得的xml文件:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<feed xml:base="https://tfsodata.visualstudio.com/DefaultCollection/" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom">
  <title type="text">WorkItems</title>
  <id>https://tfsodata.visualstudio.com/DefaultCollection/Projects('project1')/WorkItems/</id>
<updated>2014-05-02T14:52:17Z</updated>
<link rel="self" title="WorkItems" href="WorkItems" />
<entry m:etag="W/&quot;datetime'2014-03-12T19%3A54%3A38.193%2B00%3A00'&quot;">
<id>https://tfsodata.visualstudio.com/DefaultCollection/WorkItems(1)</id>
<title type="text">ProjetTest</title>
<summary type="text"></summary>
<updated>2014-03-12T19:54:38Z</updated>
<author>
  <name />
</author>
<link rel="edit" title="WorkItem" href="WorkItems(1)" />
<link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Attachments" type="application/atom+xml;type=feed" title="Attachments" href="WorkItems(1)/Attachments" />
<link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Links" type="application/atom+xml;type=feed" title="Links" href="WorkItems(1)/Links" />
<category term="Microsoft.Samples.DPE.ODataTFS.Model.Entities.WorkItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
<content type="application/xml">
  <m:properties>
    <d:Id m:type="Edm.Int32">1</d:Id>
    <d:Project>project1</d:Project>
    <d:Type>Product Backlog Item</d:Type>
    <d:WebEditorUrl>https://xxxx.visualstudio.com/web/wi.aspx?pcguid=f2ba9200-f167-43e8-a92e-d36b1bc1b561&amp;id=1</d:WebEditorUrl>
    <d:AreaPath>ptoject1</d:AreaPath>
    <d:IterationPath>project1</d:IterationPath>
    <d:Revision m:type="Edm.Int32">2</d:Revision>
    <d:Priority m:null="true" />
    <d:Severity m:null="true" />
    <d:StackRank m:type="Edm.Double">0</d:StackRank>
    <d:AssignedTo></d:AssignedTo>
    <d:CreatedDate m:type="Edm.DateTime">2014-03-12T19:54:25.783+00:00</d:CreatedDate>
    <d:CreatedBy>xxxxx</d:CreatedBy>
    <d:ChangedDate m:type="Edm.DateTime">2014-03-12T19:54:38.193+00:00</d:ChangedDate>
    <d:ChangedBy>xxxxx</d:ChangedBy>
    <d:ResolvedBy m:null="true" />
    <d:Title>ProjetTest</d:Title>
    <d:State>New</d:State>
    <d:Reason>New backlog item</d:Reason>
    <d:CompletedWork m:type="Edm.Double">0</d:CompletedWork>
    <d:RemainingWork m:type="Edm.Double">0</d:RemainingWork>
    <d:Description></d:Description>
    <d:ReproSteps m:null="true" />
    <d:FoundInBuild m:null="true" />
    <d:IntegratedInBuild></d:IntegratedInBuild>
    <d:AttachedFileCount m:type="Edm.Int32">0</d:AttachedFileCount>
    <d:HyperLinkCount m:type="Edm.Int32">0</d:HyperLinkCount>
    <d:RelatedLinkCount m:type="Edm.Int32">0</d:RelatedLinkCount>
    <d:Risk m:null="true" />
    <d:StoryPoints m:type="Edm.Double">0</d:StoryPoints>
    <d:OriginalEstimate m:type="Edm.Double">0</d:OriginalEstimate>
    <d:BacklogPriority m:type="Edm.Double">1000000000</d:BacklogPriority>
    <d:BusinessValue m:type="Edm.Int32">0</d:BusinessValue>
    <d:Effort m:type="Edm.Double">0</d:Effort>
    <d:Blocked m:null="true" />
    <d:Size m:type="Edm.Double">0</d:Size>
  </m:properties>
  </content>
</entry>
<entry m:etag="W/&quot;datetime'2014-03-24T12%3A07%3A56.397%2B00%3A00'&quot;">
<id>https://tfsodata.visualstudio.com/DefaultCollection/WorkItems(2)</id>
<title type="text">test2</title>
<summary type="text"></summary>
<updated>2014-03-24T12:07:56Z</updated>
<author>
  <name />
</author>
<link rel="edit" title="WorkItem" href="WorkItems(2)" />
<link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Attachments" type="application/atom+xml;type=feed" title="Attachments" href="WorkItems(2)/Attachments" />
<link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Links" type="application/atom+xml;type=feed" title="Links" href="WorkItems(2)/Links" />
<category term="Microsoft.Samples.DPE.ODataTFS.Model.Entities.WorkItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
<content type="application/xml">
  <m:properties>
    <d:Id m:type="Edm.Int32">2</d:Id>
    <d:Project>project1</d:Project>
    <d:Type>Product Backlog Item</d:Type>
    <d:WebEditorUrl>https://xxxxx.visualstudio.com/web/wi.aspx?pcguid=f2ba9200-f167-43e8-a92e-d36b1bc1b561&amp;id=2</d:WebEditorUrl>
    <d:AreaPath>project1</d:AreaPath>
    <d:IterationPath>project1</d:IterationPath>
    <d:Revision m:type="Edm.Int32">4</d:Revision>
    <d:Priority m:null="true" />
    <d:Severity m:null="true" />
    <d:StackRank m:type="Edm.Double">0</d:StackRank>
    <d:AssignedTo></d:AssignedTo>
    <d:CreatedDate m:type="Edm.DateTime">2014-03-12T20:16:49.827+00:00</d:CreatedDate>
    <d:CreatedBy>xxxx</d:CreatedBy>
    <d:ChangedDate m:type="Edm.DateTime">2014-03-24T12:07:56.397+00:00</d:ChangedDate>
    <d:ChangedBy>xxxx</d:ChangedBy>
    <d:ResolvedBy m:null="true" />
    <d:Title>test2</d:Title>
    <d:State>Committed</d:State>
    <d:Reason>Additional work found</d:Reason>
    <d:CompletedWork m:type="Edm.Double">0</d:CompletedWork>
    <d:RemainingWork m:type="Edm.Double">0</d:RemainingWork>
    <d:Description></d:Description>
    <d:ReproSteps m:null="true" />
    <d:FoundInBuild m:null="true" />
    <d:IntegratedInBuild></d:IntegratedInBuild>
    <d:AttachedFileCount m:type="Edm.Int32">0</d:AttachedFileCount>
    <d:HyperLinkCount m:type="Edm.Int32">0</d:HyperLinkCount>
    <d:RelatedLinkCount m:type="Edm.Int32">0</d:RelatedLinkCount>
    <d:Risk m:null="true" />
    <d:StoryPoints m:type="Edm.Double">0</d:StoryPoints>
    <d:OriginalEstimate m:type="Edm.Double">0</d:OriginalEstimate>
    <d:BacklogPriority m:type="Edm.Double">999968378</d:BacklogPriority>
    <d:BusinessValue m:type="Edm.Int32">0</d:BusinessValue>
    <d:Effort m:type="Edm.Double">0</d:Effort>
    <d:Blocked m:null="true" />
    <d:Size m:type="Edm.Double">0</d:Size>
  </m:properties>
</content>
</entry>
</feed>

我的类:

粘贴特殊的XML类(来自上面的XML)

my function:

public  IEnumerable<TfsEntitiesXml.feed> Deserialize()
    {

       string xml = "https://tfsodata.visualstudio.com/DefaultCollection/Projects('xxxx')/WorkItems".Trim();
        XmlSerializer serilaizer = new XmlSerializer(typeof(TfsEntitiesXml.feed));
        //string xml = "";
        byte[] buffer = Encoding.UTF8.GetBytes(xml);
        var stream = new MemoryStream();
        stream.WriteAsync(buffer, 0, buffer.Length);
       IEnumerable<TfsEntitiesXml.feed> result =     (IEnumerable<TfsEntitiesXml.feed>)serilaizer.Deserialize(stream);
        return result;
    }

和xaml

<ListView x:Name="itemsListView"
                  SelectionMode="None"
                  ItemsSource="{Binding TfsList}" >
            <ListView.ItemTemplate>
                <DataTemplate>
                    <TextBlock
                            Foreground=
                            "{StaticResource ListViewItemOverlayForegroundThemeBrush}" 
                            Style="{StaticResource TitleTextStyle}" Height="60" 
                            TextWrapping="Wrap"
                            Margin="15,5,15,0">
                        <Run  Text="{Binding Title}" ></Run>
                        <Run  Text="{Binding State}" ></Run>

                    </TextBlock>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

var projects = tfsConnector.Deserialize();
        DefaultViewModel["TfsList"] = projects;

当我运行时,我得到这个异常

类型为'System '的异常。InvalidOperationException'在System.Xml.dll中发生,但未在用户代码中处理

附加信息:XML文档(0,0)中有错误。

我已经为这个问题挣扎了好几天了。有人能帮帮我吗?谢谢你

反序列化XML (TFS oData)

您应该简单地为tfsodata服务创建一个服务引用,这样您将获得一个类型化引用,而不必与xml混淆。

查看此博文