本文将分享为什么XmlSerializer不支持Dictionary?的详细内容,并且还将对xml不支持load属性进行详尽解释,此外,我们还将为大家带来关于.net–NonSerialized和Xm
本文将分享为什么XmlSerializer不支持Dictionary?的详细内容,并且还将对xml不支持load属性进行详尽解释,此外,我们还将为大家带来关于.net – NonSerialized和Xml.Serialization.XmlIgnore之间的区别?、.net – 为什么XmlSerializer没有序列化我的数组?、at org.apache.hadoop.io.serializer.SerializationFactory.getSerializer(SerializationFactory.java:73)、c# .net core System.Xml.Serialization 需使用包 System.Xml.XmlSerializer补齐属性的相关知识,希望对你有所帮助。
本文目录一览:- 为什么XmlSerializer不支持Dictionary?(xml不支持load属性)
- .net – NonSerialized和Xml.Serialization.XmlIgnore之间的区别?
- .net – 为什么XmlSerializer没有序列化我的数组?
- at org.apache.hadoop.io.serializer.SerializationFactory.getSerializer(SerializationFactory.java:73)
- c# .net core System.Xml.Serialization 需使用包 System.Xml.XmlSerializer补齐属性
为什么XmlSerializer不支持Dictionary?(xml不支持load属性)
只是好奇为什么不支持Dictionary XmlSerializer
?
通过使用DataContractSerializer
对象并将其写入,您可以很容易地解决它XmlTextWriter
,但是Dictionary的特征是什么使得XmlSerializer
考虑到它实际上是KeyValuePairs数组很难处理。
实际上,您可以将传递IDictionary<TKey, TItem>
给需要的方法IEnumerable<KeyValuePairs<TKey,ITem>>
。
答案1
小编典典哈希表通常需要哈希码和相等比较器提供程序。这些不能以XML轻松序列化,并且绝对不会移植。
但是我认为您已经找到了答案。只需将哈希表序列化为a List<KeyValuePair<K,V>>
,然后将其(重新)构造为哈希表即可。
.net – NonSerialized和Xml.Serialization.XmlIgnore之间的区别?
System.NonSerialized和System.Xml.Serialization.XmlIgnore属性似乎做了这个工作,但它们有什么区别?看来我们可以在类的任何一个属性或者字段上使用XmlIgnore.但是NonSerialized只能在字段上使用.在任何情况下是否有任何理由不使用XmlIgnore,如果是这样,NonSerialized属性的目的是什么?为什么使用不同?
这是允许的:
<System.NonSerialized()> _ Public Foo As String
这是允许的:
<System.Xml.Serialization.XmlIgnore()> _ Public Foo As String
这是允许的:
<System.Xml.Serialization.XmlIgnore()> _ Public Property Bar() As String Get Return _Bar End Get Set(ByVal value As String) _Bar = value End Set End Property
但这是不允许的:
<System.NonSerialized()> _ Public Property Bar() As String Get Return _Bar End Get Set(ByVal value As String) _Bar = value End Set End Property
.net – 为什么XmlSerializer没有序列化我的数组?
[Serializable] public struct Entry { public string artkey,lid,request,status,requestdate; }
很简单吧?序列化这些列表应该是小菜一碟.
我有一个编译这些列表的函数.要序列化我的列表,我尝试以下代码:
XmlSerializer serializer = new XmlSerializer(typeof(Entry)); System.IO.MemoryStream ms = new System.IO.MemoryStream(); serializer.Serialize(ms,entries.ToArray()); ms.Writeto(Response.OutputStream);
此代码打印以下异常:
<error>system.invalidOperationException: There was an error generating the XML document. ---> system.invalidCastException: Specified cast is not valid. at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterEntry.Write3_Entry(Object o) --- End of inner exception stack trace --- at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter,Object o,XmlSerializerNamespaces namespaces,String encodingStyle,String id) at System.Xml.Serialization.XmlSerializer.Serialize(Stream stream,XmlSerializerNamespaces namespaces) at System.Xml.Serialization.XmlSerializer.Serialize(Stream stream,Object o) at CCB_Requests.xmlResponse_selectFromCcb_Requests(HttpResponse response) at CCB_Requests.ProcessRequest(HttpContext context)</error>
看来我一定是犯了一个简单的错误.我怎样才能解决这个问题?
解决方法
// typeof(Entry) ==> typeof(Entry[]) XmlSerializer serializer = new XmlSerializer(typeof(Entry[]));
at org.apache.hadoop.io.serializer.SerializationFactory.getSerializer(SerializationFactory.java:73)
运行hadoop 统计学生成绩的例子 就报了这个错,都不做的错在哪里 ,郁闷了 ,想跟踪都不怎么下手,求大神指点江山。console 报的错:
13/09/12 00:15:20 INFO mapred.JobClient: map 0% reduce 0%
13/09/12 00:15:31 INFO mapred.JobClient: Task Id : attempt_201309112309_0010_m_000000_0, Status : FAILED
java.lang.NullPointerException
at org.apache.hadoop.io.serializer.SerializationFactory.getSerializer(SerializationFactory.java:73)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.<init>(MapTask.java:970)
at org.apache.hadoop.mapred.MapTask$NewOutputCollector.<init>(MapTask.java:673)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:756)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:364)
at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190)
at org.apache.hadoop.mapred.Child.main(Child.java:249)
看这个就知道是一个空指针,其他的啥子信息都没用,然后看logs日志 :
13/09/12 00:15:20 INFO mapred.JobClient: map 0% reduce 0%
13/09/12 00:15:31 INFO mapred.JobClient: Task Id : attempt_201309112309_0010_m_000000_0, Status : FAILED
java.lang.NullPointerException
at org.apache.hadoop.io.serializer.SerializationFactory.getSerializer(SerializationFactory.java:73)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.<init>(MapTask.java:970)
at org.apache.hadoop.mapred.MapTask$NewOutputCollector.<init>(MapTask.java:673)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:756)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:364)
at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190)
at org.apache.hadoop.mapred.Child.main(Child.java:249)
只能看到是那个任务上有错 ,但不知道why?求哥些指点指点,谢谢了
c# .net core System.Xml.Serialization 需使用包 System.Xml.XmlSerializer补齐属性
.net core 也是够奇葩的,去掉了原先许多using System.Xml.Serialization中的接口又以打包的方式提供真没话讲了。 代码:
// [XmlRoot("DeleteResult")]和[XmlElement("Deleted")],.net core中引用`System.Xml.Serialization`是没有提供的这种方法的,你需要安装依赖包System.Xml.XmlSerializer就可以了。
[XmlRoot("DeleteResult")]
public class DeleteObjectsResult : GenericResult
{
private DeletedObject[] _keys;
[XmlElement("Deleted")]
public DeletedObject[] Keys
{
get
{
if (EncodingType == null)
return _keys;
bool isUrlEncoding = EncodingType.ToLowerInvariant().Equals(HttpUtils.UrlEncodingType);
foreach (var key in _keys)
{
key.Key = isUrlEncoding ? HttpUtils.DecodeUri(key.Key) : key.Key;
}
return _keys;
}
set
{
this._keys = value;
}
}
今天关于为什么XmlSerializer不支持Dictionary?和xml不支持load属性的介绍到此结束,谢谢您的阅读,有关.net – NonSerialized和Xml.Serialization.XmlIgnore之间的区别?、.net – 为什么XmlSerializer没有序列化我的数组?、at org.apache.hadoop.io.serializer.SerializationFactory.getSerializer(SerializationFactory.java:73)、c# .net core System.Xml.Serialization 需使用包 System.Xml.XmlSerializer补齐属性等更多相关知识的信息可以在本站进行查询。
本文标签: