.net的Deserialize能反序列化微信公众平台post的XML吗

landry1234 2014-01-18 10:43:45
微信公众平台提供的XML文档是最简单的格式,例如
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[voice]]></MsgType>
<Voice>
<MediaId><![CDATA[media_id]]></MediaId>
</Voice>
</xml>

貌似用以下方法反序列化到对象不成功

/// <summary>
/// 反序列化
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
public static object Load(Type type,Stream stream)
{
try
{
XmlSerializer serializer = new XmlSerializer(type);
return serializer.Deserialize(stream);
}
catch (Exception ex)
{
throw ex;
}
}

我之前是用比较复杂的XML文档格式,能反序列化成功,如下
<?xml version="1.0"?>
<siteconfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<webname>xx</webname>
<webcompany>xx</webcompany>
<weburl>xxx</weburl>
</siteconfig>

有人成功过吗?
...全文
156 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
嗯,我试了一下你的代码,它是可以解析的。
public class xml
{
    public string ToUserName { get; set; }
    public long CreateTime { get; set; }
}
var s = @"<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[voice]]></MsgType>
<Voice>
<MediaId><![CDATA[media_id]]></MediaId>
</Voice>
</xml>";
XmlSerializer serializer = new XmlSerializer(typeof(xml));
var result = (xml)serializer.Deserialize(new MemoryStream(Encoding.Unicode.GetBytes(s)));
Debug.Assert(result.ToUserName == "toUser");
Debug.Assert(result.CreateTime == 12345678);
断言测试通过!
  • 打赏
  • 举报
回复
谁知道你的type变量里存的是什么呢? 你可以在<xml></xml>前边添加必要的<<?xml version="1.0"?>,甚至为你的 serializer 设置命名空间属性。 你也可以用一个比较精简快速的xml解析器。(我认为微软提供的xml和json解析器都确实比较垃圾,缺少必要的灵活性)。
小猪八Q 2014-01-18
  • 打赏
  • 举报
回复
看看Exception的消息是什么,估计是xml格式的问题 可以使用 System.Xml.Linq.XDocument doc = System.Xml.Linq.XDocument.Load(path); 这种方式来解析

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧