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

时间:2014-04-30 08:19:28

标签: c# xml serialization xml-serialization

enter image description here我是VS 2012 silverlight-5初学者。我试图从xml文件序列化和反序列化。这样做时我有以下错误:

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个类(参数,组件和属性)在一个类中获得)。

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列表中没有它。 问题的原因是什么以及如何摆脱它?提前谢谢。

评论后编辑:

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是:

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 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>

**它工作没有错误,但我想知道为什么它总是null对象(在调试时)甚至XmlParameter.xml文件的路径是正确的。是因为使用“[DataContract]”而不是[Serialized]?因为它是银光应用。实际上我已经显示了节点内部的元素,我必须在节点"XAUUSD"中出现的attribute.cs类中显示<ccypair>XAUUSD</ccypair> **

4 个答案:

答案 0 :(得分:8)

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

我认为您将C#using语句与Java import语句混淆。在Java中,您可以导入特定的类(或包含*的所有类)。在C#中,using语句导入指定名称空间中的所有类型。

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


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

同时确保您引用了System.Runtime.Serialization程序集。

答案 1 :(得分:0)

添加

using System.Runtime.Serialization;

答案 2 :(得分:0)

我遇到了同样的问题,并通过添加此解决问题

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

答案 3 :(得分:0)

如果应用程序面向 .NET 2.0,但您正在编译不同的 .NET 版本/堆栈,也会导致这种情况。