Typ oder namespace-name 'Serializable' existiert nicht im namespace 'System' (fehlt ein Assemblyverweis?
Ich bin VS 2012 silverlight-5 Anfänger. Ich habe versucht zu serialisieren und Deserialisieren aus einer xml-Datei. Ich habe folgenden Fehler, während dies zu tun :
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?)
Mein code für die Serialisierung ist :
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);
}
}
}
}
Aber ich bin daran interessiert, dass jede Klasse separat (nicht alle 3 Klassen (parameter -, Bauteil-und Attribut), die in einer Klasse).
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; }
}
}
ich versuchte Referenz using System.Serializable;
aber es ist nicht verfügbar in der dll-Liste, die ich in meinem VS2012.
Was ist die Ursache des Problems und wie bekommt man es Los ? Vielen Dank im Voraus.
BEARBEITEN NACH Kommentare:
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";
}
}
}
Und Serialisierung.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-Datei ist 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>
**Es arbeitet ohne Fehler, aber ich Frage mich, warum es immer null-Objekt(debugging) auch der Weg von XmlParameter.xml Datei ist korrekt. Ist es durch die Verwendung von "[DataContract] - " statt [Serialisiert] ? weil es si silverlight-Anwendung. Eigentlich habe ich todisplay der Elemente in den Knoten wie,ich habe die Anzeige "XAUUSD"
in meinem attribute.cs
Klasse, die in Knoten <ccypair>XAUUSD</ccypair>
**
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine
System.Serializable
namespace; derSerializableAttribute
- Klasse ist in derSystem
namespace. Sie sollten nur schreibenusing System;
.Ich glaube, du bist verwirrend, C#
using
Aussagen mit Javaimport
- Anweisung. In Java importieren von Klassen (oder alle Klassen aus einem Paket mit*
). In C#, dieusing
- Anweisung importiert alle Arten in dem angegebenen namespace.Derzeit ist die Angabe einer Klasse, nach dem Namen
using
ist ein Fehler, aber in C# 6 wird es möglich sein, und importiert alle statischen Elemente aus der Klasse.Anderen Problem: Sie schrieb
Datamember
stattDataMember
; C# ist case-Sensitiv. Und sowieso,DataMember
hat keine Wirkung auf eine Klasse, die nicht denDataContract
Attribut.Auch sicherstellen, dass Sie auf die
System.Runtime.Serialization
Montage.using System.Serializable;
- AnweisungDataContract
stattattribute
element ist nicht die Wurzel des XML-versuchen zu Deserialisieren es der Klasseattribute
wird nicht funktionieren... Sie muss Deserialisieren zuparameter
stattFügen Sie einfach
Ich hab das gleiche problem und indem diese das problem gelöst