.net2.0中WebService在序列化xml数据Generic字典类型的问题
2011-01-13 15:55
489 查看
最近在公司代码中一个WEBSERVICE看到使用字典类型做为返回类型,如下:
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
DEBUG,出现下面的Exception:
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
好了,用个新的类型替换原来的,就可以了。
希望对您开发有帮助。
作者:PetterLiu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-PetterLiuBlog。
[WebMethod] publicIDictionary<string,string>UpdateThreadById(RequestThreadreqThread)....
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
DEBUG,出现下面的Exception:
CannotserializeinterfaceSystem.Collections.Generic.IDictionary`2[[System.String,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089],[System.String,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089]].
解决方法如下,增一个类型:[XmlRoot("dictionary")]
publicclassSerializableDictionary<TKey,TValue>:Dictionary<TKey,TValue>,IXmlSerializable
{
#regionIXmlSerializableMembers
publicSystem.Xml.Schema.XmlSchemaGetSchema()
{
returnnull;
}
publicvoidReadXml(System.Xml.XmlReaderreader)
{
varkeySerializer=newXmlSerializer(typeof(TKey));
varvalueSerializer=newXmlSerializer(typeof(TValue));
boolwasEmpty=reader.IsEmptyElement;
reader.Read();
if(wasEmpty)
return;
while(reader.NodeType!=System.Xml.XmlNodeType.EndElement)
{
reader.ReadStartElement("item");
reader.ReadStartElement("key");
TKeykey=(TKey)keySerializer.Deserialize(reader);
reader.ReadEndElement();
reader.ReadStartElement("value");
TValuevalue=(TValue)valueSerializer.Deserialize(reader);
reader.ReadEndElement();
Add(key,value);
reader.ReadEndElement();
reader.MoveToContent();
}
reader.ReadEndElement();
}
publicvoidWriteXml(System.Xml.XmlWriterwriter)
{
varkeySerializer=newXmlSerializer(typeof(TKey));
varvalueSerializer=newXmlSerializer(typeof(TValue));
foreach(varkeyinthis.Keys)
{
writer.WriteStartElement("item");
writer.WriteStartElement("key");
keySerializer.Serialize(writer,key);
writer.WriteEndElement();
writer.WriteStartElement("value");
TValuevalue=this[key];
valueSerializer.Serialize(writer,value);
writer.WriteEndElement();
writer.WriteEndElement();
}
}
#endregion
}
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
好了,用个新的类型替换原来的,就可以了。
希望对您开发有帮助。
作者:
出处:
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-
相关文章推荐
- DateTime数据类型的XML序列化及时区问题(存档)
- DateTime数据类型的XML序列化及时区问题
- JavaScriptSerializer 对 DateTime 数据类型的JSON序列化的问题
- 通过soap请求webservice时,返回的数据是XML类型,有时候也需要解析本地的xml数据等,苹果自带类NSXMLParser解析xml还是很方便的,简单轻便
- 解决Python自带的json序列化工具不能序列化datetime类型数据问题
- JavaScriptSerializer 对 DateTime 数据类型的JSON序列化的问题
- 解决mysql 数据库中日期类型00:00:00 的问题 设置xml数据类型:java.util.Date
- JavaScriptSerializer 对 DateTime 数据类型的JSON序列化的问题
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(10):服务器端和客户端数据类型的自动转换:以XML方式序列化数据、小结
- 解决Python自带的json不能序列化data,datetime类型数据问题
- 初学Flex,在使用Webservice时遇到Xml数据绑定的一个问题,试了N个方案,均没解决。
- 序列化对象到Xml文件以及反序列话Xml文件到对象(序列化数据到8个Java原型类型)
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(10):服务器端和客户端数据类型的自动转换:以XML方式序列化数据、小结
- 服务器端和客户端数据类型的自动转换:以XML方式序列化数据
- 前台数据json序列化,从post或get中取py数据类型:QueryDict转字典dict
- ORACLE的ALL_VIEWS数据字典text字段long类型问题
- ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml)
- 格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出错: GetLzdtArticleResult。InnerException 消息是“反序列化对象 属于类型 lzdt.DTO.Dtolzdt[] 时出现错误。读取 XML 数据时,超出最大
- C# WebApi Xml序列化问题解决方法:“ObjectContent`1”类型未能序列化内容类型“application/xml;charset=utf-8"的响应正文。...
- SSH框架问题——hbm.xml配置出现的org.hibernate.MappingException: Could not determine type for:(貌似叫数据类型转换错误)问题