首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型或命名空间名称“Serializable”在命名空间“System”中不存在(是否缺少程序集引用?

类型或命名空间名称“Serializable”在命名空间“System”中不存在(是否缺少程序集引用?
EN

Stack Overflow用户
提问于 2014-04-30 16:19:28
回答 4查看 19K关注 0票数 2

我是VS 2012 silverlight-5初学者。我尝试从xml文件中序列化和反序列化。执行此操作时出现以下错误:

代码语言:javascript
复制
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?)

我的序列化代码是:

代码语言:javascript
复制
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个类(参数、组件和属性)都在一个类中获得)。

代码语言:javascript
复制
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列表中不可用。问题的原因是什么?如何摆脱它?提前谢谢。

在注释后编辑:

代码语言:javascript
复制
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是:

代码语言:javascript
复制
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

代码语言:javascript
复制
<?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“而不是序列化?因为它是silverlight应用程序。实际上,我必须显示节点内的元素,例如,我必须在节点<ccypair>XAUUSD</ccypair> **中的attribute.cs类中显示"XAUUSD"

EN

回答 4

Stack Overflow用户

发布于 2014-04-30 16:30:38

没有System.Serializable命名空间;SerializableAttribute类位于System命名空间中。你应该直接写using System;

我认为您混淆了JavaJava语句和C# import语句。在Java语言中,您可以导入特定的类(或使用*从包中导入所有类)。在C#中,using语句导入指定命名空间中的所有类型。

目前,在using之后指定类名是错误的,但在C# 6中这将是可能的,并且将从类中导入所有静态成员。

其他问题:您编写的是Datamember而不是DataMember;C#区分大小写。无论如何,对于没有DataContract属性的类,DataMember是无效的。

还要确保引用了System.Runtime.Serialization程序集。

票数 11
EN

Stack Overflow用户

发布于 2017-05-25 17:47:36

我得到了同样的问题,并通过添加以下代码解决了问题

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
票数 1
EN

Stack Overflow用户

发布于 2016-03-10 15:49:26

只需添加

代码语言:javascript
复制
using System.Runtime.Serialization;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23383060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档