命名空间“System"中不存在类型或命名空间名称“Serializable"(您是否缺少程序集引用? [英] type or namespace name 'Serializable' does not exist in the namespace 'System' (are you missing an assembly reference?

查看:41
本文介绍了命名空间“System"中不存在类型或命名空间名称“Serializable"(您是否缺少程序集引用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是 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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆