我有一个返回 List 的 MVC web api 返回给客户端的 XML 是这样的:
<ArrayOfLeadChange xmlns="The-namespace">
<LeadChange>
...
<LeadChange>
<ArrayOfLeadChange>
我已将 LeadChange 类复制到客户端并尝试将 xml 反序列化为 List,但我得到一个异常,即 xml 中存在错误“意外”
有没有一种获取或反序列化的好方法,以便我可以在客户端使用对象?
我有一个返回 List 的 MVC web api 返回给客户端的 XML 是这样的:
<ArrayOfLeadChange xmlns="The-namespace">
<LeadChange>
...
<LeadChange>
<ArrayOfLeadChange>
我已将 LeadChange 类复制到客户端并尝试将 xml 反序列化为 List,但我得到一个异常,即 xml 中存在错误“意外”
有没有一种获取或反序列化的好方法,以便我可以在客户端使用对象?
添加对System.Net.Http.Formatting
- 这是 Web API 的一部分的引用,但如果您没有在客户端上安装 Web API 程序集,您可以从 Nuget 获取客户端位 - http://nuget.org/packages/Microsoft.AspNet.WebApi .Client/4.0.20710.0
PM> Install-Package Microsoft.AspNet.WebApi.Client -Version 4.0.20710.0
然后您可以从 Web API 获取并使用反序列化ReadAsAsync<T>
- http://msdn.microsoft.com/en-us/library/hh944541(v=vs.108).aspx
例如:
var myobjects = Request.Content.ReadAsAsync<List<LeadChange>>().Result;
我不确定手动反序列化是否是您的用例的正确路径。但是,如果你想要一个好的全能 XML 反序列化器,试试这个。
编辑:这是返回集合的正确函数。
/// <summary>
/// Converts an XDoc into a List<T> of entities
/// </summary>
/// <typeparam name="T">Any serializable object</typeparam>
/// <param name="doc"></param>
/// <returns></returns>
public static List<T> DeserializeCollection<T>(XDocument doc)
{
if (doc == null)
return null;
try
{
XmlSerializer serializer = new XmlSerializer(typeof(List<T>));
XmlReader reader = doc.CreateReader();
List<T> result = (List<T>)serializer.Deserialize(reader);
reader.Close();
return result;
}
catch (Exception e)
{
Logging.Log(Severity.Error, "Unable to deserialize document.", e);
return null;
}
}
我不确定为什么你在<ArrayOf
节点中有一个命名空间。尝试删除它。那应该行得通。您还可以将您的列表输入此函数,以查看“正确”/“预期”的 XML 应该是什么。
/// <summary>
/// Converts a List<T> of entities into an XDoc.
/// </summary>
/// <typeparam name="T">Any serializable object</typeparam>
/// <param name="doc"></param>
/// <param name="paramList"></param>
public static XDocument SerializeCollection<T>(List<T> paramList)
{
if (paramList == null)
return null;
XDocument doc = new XDocument();
try
{
XmlSerializer serializer = new XmlSerializer(paramList.GetType());
XmlWriter writer = doc.CreateWriter();
serializer.Serialize(writer, paramList);
writer.Close();
return doc;
}
catch (Exception e)
{
Logging.Log(Severity.Error, "Unable to serialize list", e);
return null;
}
}
}