命名空间“System"中不存在类型或命名空间名称“Serializable"(您是否缺少程序集引用? [英] type or namespace name 'Serializable' does not exist in the namespace 'System' (are you missing an assembly reference?
问题描述
我是 VS 2012 silverlight-5 初学者.我试图从 xml 文件序列化和反序列化.执行此操作时出现以下错误:
I am VS 2012 silverlight-5 beginner. I tried to serialize and de-serialize from a xml file. I have following error while doing this :
The type or namespace name 'Serializable' does not exist in the namespace 'System' (are you missing an assembly reference?)
The type or namespace name 'SerializableAttribute' could not be found (are you missing a using directive or an assembly reference?)
The type or namespace name 'DatamemberAttribute' could not be found (are you missing a using directive or an assembly reference?)
The type or namespace name 'Datamember' could not be found (are you missing a using directive or an assembly reference?)
我的序列化代码是:
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Runtime.Serialization.Json;
using System.Runtime;
using System.Xml.Serialization;
using System.Runtime.Serialization;
using System.IO;
namespace Model.XML
{
public static class Serialization<T> where T : class
{
public static T DeserializeFromXmlFile(string fileName)
{
if (!File.Exists(fileName))
{
return null;
}
DataContractSerializer deserializer = new DataContractSerializer(typeof(T));
using (Stream stream = File.OpenRead(fileName))
{
return (T)deserializer.ReadObject(stream);
}
}
}
}
但我有兴趣分别拥有每个类(不是在一个类中获得所有 3 个类(参数、组件和属性).
But i am interested in having each class seperately (not all the 3 classes (parameter,component and attribute) obtained in one class).
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Runtime.Serialization.Json;
using System.Runtime;
using System.Xml.Serialization;
using System.Runtime.Serialization;
using System.IO;
using System.Xml.Serialization.XmlTypeAttribute;
using System.Serializable; //It gives red line under Serializable
namespace Model.XML
{
[Serializable] //It gives red line
public class attribute
{
[Datamember] //It gives red line
public string name { get; set; }
[Datamember] //It gives red line
public string label { get; set; }
[Datamember] //It gives red line
public string unit { get; set; }
[Datamember] //It gives red line
public component thisComponent { get; set; }
}
}
我试图引用 using System.Serializable;
但它在我的 VS2012 中的 dll 列表中不可用.问题的原因是什么以及如何摆脱它?提前致谢.
i tried to reference using System.Serializable;
but it is not available in the dll list i have in my VS2012.
What is the cause of problem and how to get a rid of it ? Thanks in advance.
评论后
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Runtime.Serialization.Json;
using System.Runtime;
using System.Xml.Serialization;
using System.Runtime.Serialization;
using System.IO;
using System.Collections.Generic;
namespace Model.XML
{
[DataContract]
public class attribute
{
[DataMember]
public string type { get; set; }
[DataMember]
public string displayed { get; set; }
[DataMember]
public string add_remove { get; set; }
[DataMember]
public string ccypair { get; set; }
[DataMember]
public List<int> item { get; set; }
public static void Main()
{
attribute Obj1 = Serialization<attribute>.DeserializeFromXmlFile("C:\\Users\\SHEK\\Desktop\\VannakNew\\DEV_CENTER\\Model\\XML\\XmlParameter.xml");
// Obj1.type = "shekhar";
}
}
}
而 serialization.cs 是:
And serialization.cs is :
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Runtime.Serialization.Json;
using System.Runtime;
using System.Xml.Serialization;
using System.Runtime.Serialization;
using System.IO;
namespace Model.XML
{
public static class Serialization<T> where T : class
{
public static T DeserializeFromXmlFile(string fileName)
{
if (!File.Exists(fileName))
{
MessageBox.Show("File Path is wrong");
return null;
}
DataContractSerializer deserializer = new DataContractSerializer(typeof(T));
using (Stream stream = File.OpenRead(fileName))
{
return (T)deserializer.ReadObject(stream);
}
}
}
}
Xml 文件是 XmlParameter.xml
Xml file is XmlParameter.xml
<?xml version="1.0" encoding="utf-8" ?>
<parameter>
<name>bands_amounts</name>
<label>Bands Amounts</label>
<unit></unit>
<component>
<type>List</type>
<attributes>
<type>Integer</type>
<displayed>4</displayed>
<add_remove>yes</add_remove>
<item>1 000 000</item>
<item>5 000 000</item>
<item>10 000 000</item>
<item>20 000 000</item>
</attributes>
<attributes>
<ccypair>XAUUSD</ccypair>
<item>100</item>
<item>500</item>
<item>1000</item>
</attributes>
</component >
</parameter>
**它可以正常工作,但我想知道为什么即使 XmlParameter.xml 文件的路径正确,它也总是为空对象(在调试时).是因为使用 "[DataContract]" 而不是 [Serialized] 吗?因为它是 Silverlight 应用程序.实际上,我必须显示节点内的元素,例如,我必须在我的 attribute.cs
类中显示 "XAUUSD"
,该类存在于节点 <ccypair>XAUUSD</ccypair>
**
**It is working without error but i wonder why it always null object(on debugging) even the path of XmlParameter.xml file is correct. Is it due to using "[DataContract]" instead of [Serialized] ? because it si silverlight application. Actually i have todisplay the elements inside the nodes like,i have to display "XAUUSD"
in my attribute.cs
class which present in node <ccypair>XAUUSD</ccypair>
**
推荐答案
没有 System.Serializable
命名空间;SerializableAttribute
类位于 System
命名空间中.你应该只写using System;
.
There is no System.Serializable
namespace; the SerializableAttribute
class is in the System
namespace. You should just write using System;
.
我认为您将 C# using
语句与 Java import
语句混淆了.在 Java 中,您可以导入特定的类(或带有 *
的包中的所有类).在 C# 中,using
语句导入指定命名空间中的所有类型.
I think you're confusing C# using
statements with Java import
statement. In Java, you import specific classes (or all classes from a package with *
). In C#, the using
statement imports all types in the specified namespace.
目前,在 using
之后指定类名是错误的,但在 C# 6 中这是可能的,并且将从类中导入所有静态成员.
Currently, specifying a class name after using
is an error, but in C# 6 it will be possible, and will import all static members from the class.
其他问题:您编写了 Datamember
而不是 DataMember
;C# 区分大小写.无论如何,DataMember
对没有 DataContract
属性的类没有影响.
Other issue: you wrote Datamember
instead of DataMember
; C# is case sensitive. And anyway, DataMember
has no effect on a class that doesn't have the DataContract
attribute.
还要确保您已经引用了 System.Runtime.Serialization
程序集.
Also make sure you have referenced the System.Runtime.Serialization
assembly.
这篇关于命名空间“System"中不存在类型或命名空间名称“Serializable"(您是否缺少程序集引用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!