双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

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

wjs496249880 wjs496249880 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
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。
...全文
评论 7
收藏 已收藏
分享
返回顶部
wjs496249880
C# 111,129 成员 642,540 内容