|
pincet 1608 / 1117 / 165 Регистрация: 23.07.2010 Сообщений: 6,484 |
||||
|
1 |
||||
Возникла ошибка при отражении типа20.11.2013, 13:51. Показов 6970. Ответов 4 Метки нет (Все метки)
где руки править?
0 |
|
17230 / 12680 / 3323 Регистрация: 17.09.2011 Сообщений: 20,954 |
|
|
20.11.2013, 14:54 |
2 |
|
Лезьте в свойство InnerException до тех пор, пока оно не станет null.
1 |
|
pincet 1608 / 1117 / 165 Регистрация: 23.07.2010 Сообщений: 6,484 |
||||||||
|
20.11.2013, 15:22 [ТС] |
3 |
|||||||
|
Хм, ошибка вот здесь
XMLSerialization.TW. XmlAttribute/XmlText не может использоваться для кодирования составных типов
убрал [XmlAttribute] «<TabPage xmlns=»> не ожидался.» 1.ЧЯДНТ?
0 |
|
kolorotur
17230 / 12680 / 3323 Регистрация: 17.09.2011 Сообщений: 20,954 |
||||||||||||
|
20.11.2013, 17:20 |
4 |
|||||||||||
|
«<TabPage xmlns=»> не ожидался.» У вас классы называются TW, TP и так далее, а элементы в разметке — TabPage, TreeView и т.д. Либо называйте классы так же, как элементы в разметке, либо элементы в разметке называйте так же, как классы, либо классы пометьте атрибутом XmlType:
Вернет null.
1 |
|
pincet 1608 / 1117 / 165 Регистрация: 23.07.2010 Сообщений: 6,484 |
||||
|
20.11.2013, 17:40 [ТС] |
5 |
|||
|
С этим уже разобрался. Проблема в другом
т.е нужно оборачивать в доп тэги Parent и Node.
0 |
[Serializable]
public class IPzag
{
public BitArray version = new BitArray(4);//номер версии 4 бита
public BitArray header_length = new BitArray(4);//Длина заголовка 4 бита
public BitArray toS = new BitArray(8);//тип сервиса 8 бит
public ushort total_lenght;//Общая длина 16 бит
public ushort identification;//Идентификатор пакета 16 бит
public BitArray flag = new BitArray(3);//Флаги 3 бита
public BitArray fragment_offset = new BitArray(13);//Смещение фрагмента 13 бит
public byte ttl;//Время жизни 8 бит Time To Live
public byte protocol;//Протокол верхнего уровня 8 бит
public ushort checksum;//Контрольная сумма 16 бит
public uint sourse_address;//айпишник источника 32 бита
public uint destination_adress;//айпишник назначения 32 бита
[DisplayName(«Номер версии»)]
[XmlAttribute()]
public BitArray Version
{
get { return version; }
set { for (int i = 0; i < 4; i++) version[i] = Convert.ToBoolean(value); }
}
[DisplayName(«Длина заголовка»)]
[XmlAttribute()]
public BitArray Header_Length
{
get { return header_length; }
set { for (int i = 0; i < 4; i++) header_length[i] = Convert.ToBoolean(value); }
}
[DisplayName(«Тип сервиса»)]
[XmlAttribute()]
public BitArray ToS
{
get { return toS; }
set { for (int i = 0; i < 4; i++) toS[i] = Convert.ToBoolean(value); }
}
[DisplayName(«Общая длина»)]
[XmlAttribute()]
public ushort Total_lenght
{
get { return total_lenght; }
set { total_lenght = value; }
}
[DisplayName(«Идентификатор пакета»)]
[XmlAttribute()]
public ushort Identification
{
get { return identification; }
set { identification = value; }
}
[DisplayName(«Время жизни»)]
[XmlAttribute()]
public byte TTL
{
get { return ttl; }
set { ttl = value; }
}
[DisplayName(«IP-Протокол верхнего уровня»)]
[XmlAttribute()]
public byte Protocol
{
get { return protocol; }
set { protocol = value; }
}
[DisplayName(«Контрольная сумма»)]
[XmlAttribute()]
public ushort Checksum
{
get { return checksum; }
set { checksum = value; }
}
[DisplayName(«IP-адрес источника»)]
[XmlAttribute()]
public uint Sourse_address
{
get { return sourse_address; }
set { sourse_address = value; }
}
[DisplayName(«IP-адрес назначения»)]
[XmlAttribute()]
public uint Destination_adress
{
get { return destination_adress; }
set { destination_adress = value; }
}
[DisplayName(«Флаги»)]
[XmlAttribute()]
public BitArray Flag
{
get { return flag; }
set { for (int i = 0; i < 4; i++) fragment_offset[i] = Convert.ToBoolean(value); }
}
[DisplayName(«Смещение фрагмента»)]
[XmlAttribute()]
public BitArray Fragment_offset
{
get { return fragment_offset; }
set { for (int i = 0; i < 4; i++) fragment_offset[i] = Convert.ToBoolean(value); }
}
public IPzag()
{
}
}
Есть класс, экземпляр которого нужно перенести в XML файл. Однако возникает исключение
Первый этап обработки исключения типа
«System.InvalidOperationException» в System.Xml.dllДополнительные сведения: Возникла ошибка при отражении типа
«Lab2.Model.Circle».
public class Circle:Figure2D
{
private double r;
public double R
{
set
{
if (value >= 0) this.r = value;
else throw new ArgumentNullException("Wrong radius value ( value < 0 ? ) ");
}
get { return r; }
}
public override string Save()
{
string s = string.Format("Circle {0} {1} {2}",this.Center.X, this.Center.Y, this.R);
return s;
}
public override double P()
{
return 2 * Math.PI * R;
}
public override double S()
{
return Math.PI * R * R;
}
public static Circle LoadCircle(string s)
{
string[] ss = s.Split(' ');
int x = Convert.ToInt32(ss[1]);
int y = Convert.ToInt32(ss[2]);
int r = Convert.ToInt32(ss[3]);
return new Circle(new Point(x, y), r);
}
public override void Draw(PaintEventArgs e)
{
e.Graphics.DrawEllipse(new Pen(Color.Black), (int)this.Center.X, (int)this.Center.Y, (int)this.R, (int)this.R);
}
public override void Zoom(double K, bool isfromImage)
{
this.R *= K;
if(isfromImage)
{
this.Center.X *= K;
this.Center.Y *= K;
}
Console.WriteLine("circle zoom of {0}", this.GetType());
}
public override string ToString()
{
string baseInfo = base.ToString();
return baseInfo + string.Format("n R: {0}n", this.R);
}
public Circle() { }
public Circle(Point Center, double R) : base(Center)
{
this.R = R;
}
public Circle(Circle other) : base(other.Center)
{
this.R = other.R;
}
}
Есть у меня класс, мне нужно его сохранить в файл, в этом классе используется как свойство класс Font и он нужен,пробвал его заменить, на свой и конверировал его туда обратно, но сериализация всё равно не работает пишет ошибку:
Возникла ошибка при отражении типа "System.Collections.Generic.List`1[WindowsFormsApplication1.MyClass]".
Этим пытался заменить:
[Serializable]
public class SFont
{
public String name { get; set; } //возвращает имя начертания этого шрифт
public float size { get; set; } //Размер максимального пробела данного шрифта
public Byte Style { get; set; } //возвращает сведения о стиле данного шрифта
/// <summary>
/// Конструктор класса SFont
/// </summary>
/// <param name="FontName">Название шрифта</param>
/// <param name="FontSize">Размер шрифта</param>
/// <param name="fontStyle">Стиль шрифта в Byte (нужно использовать Converter)</param>
public SFont(String FontName, float FontSize, Byte fontStyle)
{
name = FontName;
size = FontSize;
Style = fontStyle;
}
}
таким классом конвертировал:
public static class Converter
{
/// <summary>
/// Конвертирует из числа от 1 до 5 в FontStyle
/// </summary>
/// <param name="number">число от 1 до 5</param>
/// <returns>FontStyle</returns>
public static FontStyle ToFontStyle(byte number)
{
FontStyle fs = new FontStyle();
switch (number)
{
case 1: fs = FontStyle.Regular;
return fs;
case 2: fs = FontStyle.Bold;
return fs;
case 3: fs = FontStyle.Italic;
return fs;
case 4: fs = FontStyle.Strikeout;
return fs;
case 5: fs = FontStyle.Underline;
return fs;
}
return fs;
}
public static Byte ToNumber(FontStyle fs)
{
Byte i = 0;
switch (fs)
{
case FontStyle.Regular: i = 1;
return i;
case FontStyle.Bold: i = 2;
return i;
case FontStyle.Italic: i = 3;
return i;
case FontStyle.Strikeout: i = 4;
return i;
case FontStyle.Underline: i = 5;
return i;
}
return i;
}
Пример использования конвертера:
textBoxMsg.Font = new Font(MyClass.FontMsg.name, MyClass.FontMsg.size, Converter.ToFontStyle(MyClass.FontMsg.Style));
SFont sFont = new SFont(fontDialog.Font.Name, fontDialog.Font.Size, Converter.ToNumber(fontDialog.Font.Style));
Кстати в моём классе заменяющем Font видимо чегото не хватает, если кто знает подскажите, не всегда правильно сохраняет шрифт
Вот как сериализовал:
List<MyClass> list = new List<MyClass>();
list.Clear();
foreach (ListViewItem item in listViewUsed.Items)
{
list.Add(new MyClass((MyClass)item.Tag));
}
XmlWriter writer = new XmlTextWriter("serialize.xml", System.Text.Encoding.UTF8);
XmlSerializer serializer = new XmlSerializer(typeof(List<MyClass>));
serializer.Serialize(writer, list);
writer.Close();
Вот мне не понятно почему возникает ошибка? Я убрал из класса который нужно сериализовать вообще любое упоминание Font, даже FonStyle пришлось конвертировать, чтобы не упоминать его в своём классе и всё равно ошибка. Ничего не понимаю. Подскажите как можно сохранить в файл свой класс и потом прочесть от туда.
-
Перемещено
1 октября 2010 г. 21:42
MSDN Forums Consolidation (От:Visual C#)
При сереализации класса Diary:
public class Diary
{
[XmlElement]
public RichTextBox rtb { get; set; }
[XmlElement]
public DateTime dt { get; set; }
public static void Add(List list_diary,Label label1,RichTextBox richTextBox)
{
Diary diary = new Diary();
DateTime d = DateTime.Now;
DateTime.TryParse(label1.Content.ToString(),out d);
diary.dt = d;
diary.rtb = richTextBox;
//DataWorking.GetData(out list_diary, «diary.xml»);
list_diary.Add(diary);
DataWorking.WriteData(list_diary, «diary.xml»);
}
}
возникает вот такая ошибка :
Кто знает в чем может быть проблема?

