高分询问XML序列化以及去掉默认命名空间的问题

wjs496249880 2013-07-03 01:11:40
XML这块不太熟悉,现在将自个定义的对象序列化时,出现点问题,各位看官来帮帮忙。涉及到序列化继承类,去掉默认的命名空间后,继承类出的节点出现了“d2p1”这个玩意,这是啥?
要序列化的对象:

[Serializable]
public class swRequest
{
public requestParam requestParam;
}
[Serializable]
[XmlInclude(typeof(roomQueryParam))]
public class requestParam
{

}
[Serializable]
public class roomQueryParam:requestParam
{
[XmlElementAttribute("hotelCode", IsNullable = false)]
public string hotelCode { get; set; }
[XmlElementAttribute("checkInDate", IsNullable = false)]
public string checkInDate { get; set; }
[XmlElementAttribute("checkOutDate", IsNullable = false)]
public string checkOutDate { get; set; }
[XmlElementAttribute("provider", IsNullable = false)]
public provider[] providers { get; set; }
}
[Serializable]
public class provider
{
[XmlElementAttribute("providerType", IsNullable = false)]
public int providerType { get; set; }
[XmlElementAttribute("providerName", IsNullable = false)]
public string providerName { get; set; }
}

序列化,这块大家都懂得

public static string XmlSerialize<T>(T obj)
{
if (obj == null) return string.Empty;

XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
using (MemoryStream memoryStream = new System.IO.MemoryStream())
{
using (XmlTextWriter xtw = new System.Xml.XmlTextWriter(memoryStream, Encoding.UTF8))
{
XmlSerializerNamespaces xns = new XmlSerializerNamespaces();
xns.Add("", "");
xmlSerializer.Serialize(xtw, obj,xns);
memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
using (System.IO.StreamReader streamReader = new System.IO.StreamReader(memoryStream, Encoding.UTF8))
{
return streamReader.ReadToEnd();
}
}
}
}

序列化的XML

<?xml version="1.0" encoding="utf-8"?><swRequest><requestParam d2p1:type="roomQueryParam" xmlns:d2p1="http://www.w3.org/2001/XMLSchema-instance"><hotelCode>SS7789</hotelCode><checkInDate>2013-07-03</checkInDate><checkOutDate>2013-07-05</checkOutDate><provider><providerType>1</providerType><providerName>测试</providerName></provider></requestParam></swRequest>

各位看官给看看,为啥去掉默认命名空间后,requestParam节点中,d2p1:type和xmlns:d2p1本来应该是xsi的都变成了d2p1。
...全文
254 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
WDYDXF 2015-05-18
  • 打赏
  • 举报
回复
你把默认命名空间去了,但是xml节点必须隶属于某个命名空间下的,所以系统自动给你加个命名空间
qinyuyaoluo 2013-10-24
  • 打赏
  • 举报
回复
楼主有解决方案没?困惑啊
wjs496249880 2013-07-04
  • 打赏
  • 举报
回复
马上就沉啦。 刘三刀何在?
wjs496249880 2013-07-04
  • 打赏
  • 举报
回复
引用 3 楼 lizhi3186575 的回复:
http://www.cnblogs.com/jiangyehu1110/archive/2013/05/23/3096041.html http://www.cnblogs.com/icebutterfly/archive/2013/03/29/2989038.html 看看这两篇文章
这两篇就是去除默认命名空间的,就是这段,跟我的代码没区别。关键是去完之后,下面的节点出现了“d2p1”做何解啊?

 XmlSerializerNamespaces xns = new XmlSerializerNamespaces();
 xns.Add("", "");
人生导师 2013-07-04
  • 打赏
  • 举报
回复
http://www.cnblogs.com/jiangyehu1110/archive/2013/05/23/3096041.html http://www.cnblogs.com/icebutterfly/archive/2013/03/29/2989038.html 看看这两篇文章
wjs496249880 2013-07-03
  • 打赏
  • 举报
回复
我擦,姚晨啦。快点来人啊。
wjs496249880 2013-07-03
  • 打赏
  • 举报
回复
大伙们别睡觉啦,起来接分啦,不然都沉了。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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