gpt4 book ai didi

c# - 尝试反序列化 XML 数组

转载 作者:数据小太阳 更新时间:2023-10-29 02:35:32 25 4
gpt4 key购买 nike

我正在尝试反序列化我从我无法控制的第 3 方 Web 服务中提取的 XML 文档,它们仅以 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>

我的类(class)看起来像这样:

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; }

}

在我的 Controller 中,我有这样的设置:

[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."}

几个小时以来,我一直在思考这个问题,试图弄清楚我需要做什么。

最佳答案

您的 xml 序列化程序需要一些有关根元素xml 命名空间 的帮助。

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));

关于c# - 尝试反序列化 XML 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21067174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com