2014-01-11 3 views
2

Я пытаюсь десериализация документа XML, который я вытягивать из веба-службы третьей стороны, что я не имею никакого контроля над и они только отправлять данные в виде XML - это выглядит следующим образом:Попытка Deserialize массиву XML

<?xml version="1.0" encoding="utf-8"?> 
<GameArray xmlns="http://foo.bar"> 
    <Game> 
    <Id>int</Id> 
    <Title>string</Title> 
    </Game> 
    <Game> 
    <Id>int</Id> 
    <Title>string</Title> 
    </Game> 
</GameArray> 

у меня есть класс, глядя, как это:

public class GamesModel 
    { 
     [XmlArray("GameArray")] 
     [XmlArrayItem("Game")] 
     public List<Game> GameList { get; set; } 

     public GamesModel ToXml() 
     { 
      var request = 
       WebRequest.Create(
        "http://foo.bar/GetGames") as 
       HttpWebRequest; 

      var xRoot = new XmlRootAttribute 
      { 
       ElementName = "GameArray", 
       Namespace = "http://foo.bar", 
       IsNullable = true 
      }; 
      var ser = new XmlSerializer(typeof(GamesModel), xRoot); 


      var response = request.GetResponse(); 
      var result = ser.Deserialize(response.GetResponseStream()); 


      return (GamesModel)result; 
     } 
    } 

    public class Game 
    { 
     [XmlElement("Id")] 
     public int Id { get; set; } 

     [XmlElement("Title")] 
     public string Title{ get; set; } 

    } 

В мой контроллер я это настроить:

[HttpGet] 
     public ActionResult GetGames() 
     { 
      var xboxGames = new GamesModel(); 

      return Content(GamesModel.ToXml().ToString(), "text/xml"); 
     } 

А потом на мой взгляд, у меня есть некоторые HTML с кнопкой, которую я хочу, чтобы назвать это на событие щелчка - так что мой JQuery выглядит следующим образом

$('.testTag').click(function() { 
    $.ajax({ 
     type: "GET", 
     url: "/Home/GetGames", 
     dataType: "xml/text", 
     success: function(xml) { 
      //dostuff 
     } 
    }); 
}); 

Я ударяя сервер просто отлично на все это , но я получаю сообщение об ошибке в строке, где я описываю десриализацию. Ошибка:

{"There is an error in XML document (2, 2)."} 

И InnerException является:

{"<GameArray xmlns='http://foo.bar/'> was not expected."} 

Я стучал головой на это в течение нескольких часов, пытаясь выяснить, что мне нужно сделать.

ответ

1

Ваш XML-сериализатор нуждается в некоторой помощи около корневой элемент и xml namespace.

XmlSerializer ser = new XmlSerializer(typeof(Game[]), 
       new XmlRootAttribute("GameArray") { Namespace = "http://foo.bar" }); 
var games = (Game[])ser.Deserialize(stream); 

public class Game 
{ 
    public string Id { set; get; } 
    public string Title { set; get; } 
} 

редактировать

string xml = @"<?xml version=""1.0"" encoding=""utf-8""?> 
<GameArray xmlns=""http://foo.bar""> 
    <Game> 
    <Id>int</Id> 
    <Title>string</Title> 
    </Game> 
    <Game> 
    <Id>int</Id> 
    <Title>string</Title> 
    </Game> 
</GameArray>"; 

XmlSerializer ser = new XmlSerializer(typeof(Game[]), 
             new XmlRootAttribute("GameArray") { Namespace = "http://foo.bar" }); 
var games = (Game[])ser.Deserialize(new StringReader(xml)); 
+0

Я думаю, что я следую вам некоторые здесь - но то, что переменная потока в виду? – Eldorian

+0

@ Eldorian любой поток, FileStream, NetworkStream и т. Д. Ваш 'response.GetResponseStream()' в порядке. –

+0

Спасибо, поэтому я изменил код на то, что вы предложили, и я все еще получаю ту же ошибку, когда он пытается десериализовать. – Eldorian