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

Sss*_*Sss 1 c# xml serialization xml-serialization

在此输入图像描述我是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?)
Run Code Online (Sandbox Code Playgroud)

我的序列化代码是:

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);
                }
            }
        }

}
Run Code Online (Sandbox Code Playgroud)

但我感兴趣的是每个类单独(不是所有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; }
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图引用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";

        }

    }
}
Run Code Online (Sandbox Code Playgroud)

而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);
                }
            }
        }

}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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

Tho*_*que 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程序集.