Меню

Ошибка при десериализации файла cleverence warehouse

Клиент работает с двумя терминалами MC32N0. С одним проблем нет, на другом часто программа зависает, приходится перегружать. После перезагрузки документ не удается восстановить. Забрал терминал, загрузил последний ром от производителя, после этого установил Mobile Smarts, удалили не сервере всю номенклатуру и заново ее загрузили. Запустили «подбор заказа» несколько позиции отсканировались без проблем, потом он опять завис.

В логе ошибок следующие записи

MobileSMARTS.exe; Подбор заказа mainApp; 19/01/2018 11:56:44.779 ERROR
ADDITION TEXT: Подбор заказа: Действие (OperationAction) «1»
MESSAGE: Ошибка при десериализации файла ‘ApplicationMobileSMARTSDocumentsf24c4c21-98e0-4889-a826-ae04f9992c74Cleverence.Warehouse.Environment.xml’, смещение: 198513
TYPE: System.Runtime.Serialization.SerializationException
[STACK TRACE]
at Cleverence.DataCollection.Xml.XmlSerializer.DeserializeFilePartially(String path, Int64 offset)
at Cleverence.Warehouse.Operation._deserializeActionsInternal()
at Cleverence.Warehouse.Operation.DeserializeActions()
at Cleverence.Warehouse.Operation.get_Actions()
at Cleverence.Warehouse.Operation.Cleverence.Warehouse.IActivity.GetActionsForActivity(IActionWorkflow wf)
at Cleverence.Warehouse.Compact.OperationAction.get_Actions()
at Cleverence.Warehouse.Compact.OperationAction.Begin()
at Cleverence.Warehouse.Compact.ActionsApplication.StartApplication()
[STACK TRACE]

—INNER EXCEPTION—
MESSAGE: The process can not access the file ‘ApplicationMobileSMARTSDocumentsf24c4c21-98e0-4889-a826-ae04f9992c74Cleverence.Warehouse.Environment.xml’ because it is being used by another process.
TYPE: System.IO.IOException
[STACK TRACE]
at System.IO.__Error.WinIOError(Int32 errorCode, String str)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean useAsync, String msgPath)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
at Cleverence.DataCollection.Xml.XmlSerializer.DeserializeFilePartially(String path, Int64 offset)
at Cleverence.Warehouse.Operation._deserializeActionsInternal()
at Cleverence.Warehouse.Operation.DeserializeActions()
at Cleverence.Warehouse.Operation.get_Actions()
at Cleverence.Warehouse.Operation.Cleverence.Warehouse.IActivity.GetActionsForActivity(IActionWorkflow wf)
at Cleverence.Warehouse.Compact.OperationAction.get_Actions()
at Cleverence.Warehouse.Compact.OperationAction.Begin()
at Cleverence.Warehouse.Compact.ActionsApplication.StartApplication()
[STACK TRACE]

На другом терминале подобных проблем не возникает. Что можно сделать в данной ситуации

Filislav

339 / 285 / 62

Регистрация: 02.09.2010

Сообщений: 547

1

05.07.2011, 10:12. Показов 10112. Ответов 10

Метки нет (Все метки)


Есть программа — записная книжка, записи сериализуются в Xml. Если программа запускается первый раз и файла с сериализованными записями еще не созданно, то все работает хорошо, сериализуется.
Но при втором запуске, когда файл уже есть, при десериализации выскакивает ошибка: «В документе XML(1,40) присутствует ошибка». Естественно программа дальше не работает. В чем может быть дело?
Вот код программы:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Collections;
using System.Xml.Serialization;
using System.Xml;
using System.Runtime.Serialization;
namespace Dialer
{
    public partial class Form1 : Form
    {
        Dialer dialer = new Dialer();
        DataTable dt = new DataTable();
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            dialer.Cont.Add(new Entrie(monthCalendar1.SelectionRange.Start, dateTimePicker1.Value, comboBox1.SelectedItem.ToString(), textBox1.Text.ToString()));
            XmlWriter writer = new XmlTextWriter(@"D:data.xml", Encoding.UTF8);
            XmlSerializer serializer = new XmlSerializer(typeof(Dialer));
            serializer.Serialize(writer, dialer);
            writer.Close();
            MessageBox.Show("Встреча добавлена");
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            dt.Clear();
            foreach (Entrie en in dialer.Cont)
            {
                dt.Rows.Add(en.Dt.ToShortDateString(), en.Time.ToLongTimeString(), en.Tip, en.Opisanie);
            }
            dataGridView1.DataSource = dt;
 
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
 
        private void monthCalendar2_DateSelected(object sender, DateRangeEventArgs e)
        {
            dt.Clear();
            foreach (Entrie en in dialer.Cont)
            {
                if (monthCalendar2.SelectionStart.ToShortDateString() == en.Dt.ToShortDateString())
                {
                    dt.Rows.Add(en.Dt.ToShortDateString(), en.Time.ToLongTimeString(), en.Tip, en.Opisanie);
                }
 
            }
            dataGridView1.DataSource = dt;
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            dt.Columns.Add("Дата");
            dt.Columns.Add("Время");
            dt.Columns.Add("Тип события");
            dt.Columns.Add("Описание");
            if (File.Exists(@"D:data.xml"))
            {
                XmlReader reader = new XmlTextReader(@"D:data.xml");
                XmlSerializer serializer = new XmlSerializer(typeof(Entrie));
                dialer = (Dialer)serializer.Deserialize(reader);
                reader.Close();
            }
        }
 
        private void button4_Click(object sender, EventArgs e)
        {
            
        }
    }
}



0



Мохаммед Али

131 / 69 / 5

Регистрация: 14.08.2009

Сообщений: 916

05.07.2011, 10:16

2

а что такое Dialer где он описан?



0



Filislav

339 / 285 / 62

Регистрация: 02.09.2010

Сообщений: 547

05.07.2011, 10:26

 [ТС]

3

Dialer это сриализуемая коллекция обьектов Entrie.

Вот он:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using System.Xml.Serialization;
using System.Collections;
 
namespace Dialer
{
    public class Dialer
    {
        private ArrayList content = new ArrayList();
        [XmlArray]
        [XmlArrayItem(typeof(Entrie))]
        public IList Cont
        {
            get
            {
                return content;
            }
        }
        public Dialer()
        {
        }
            
 
    }
 
    
}



0



Мохаммед Али

131 / 69 / 5

Регистрация: 14.08.2009

Сообщений: 916

05.07.2011, 11:42

4

ну не знай может надо к аррей лист контент прибавит тэг [NonSerialized] и почему у вас аррей лист а там тип как бы неизвестен в аттрибутах указываете Ентри, можете попробовать сделать через List<type>.



0



Sanprof

96 / 96 / 16

Регистрация: 28.01.2008

Сообщений: 426

05.07.2011, 11:46

5

я уверен такое сообщение выдает когда сериализация прошла не до конца, тоесть часть свойств сериализовалась, потом возникла ошибка, и файл не дописался.
Filislav, я же вам давал рабочий код по сериализации объекта, который работает на 100% но вы решили своим кодом, теперь отлавливайте ошибки!
чем вас это не устраивает

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
public static class XmlWorker
    {
        /// <summary>
        /// Загрузка объекта из потока
        /// </summary>
        /// <param name="typeObject">Тип объект, экземпляр класса которого нужно десериализовать</param>
        /// <param name="source">Источник откуда будет десериализован объек</param>
        /// <returns>Возвращает десериализованный объект</returns>
        public static object LoadFromStream( Type typeObject, MemoryStream source )
        {
            try
            {
                XmlSerializer xs = new XmlSerializer( typeObject );
                source.Seek( 0, 0 );
                return xs.Deserialize( source );
            }
            catch
            {
                return null;
            }
        }
 
        /// <summary>
        /// Сохранение объекта в поток
        /// </summary>
        /// <param name="sender">Объект, экземпляр класса которого нужно сериализовать</param>
        /// <returns>Возвращает поток, в котором находится сериализованный объект</returns>
        public static MemoryStream SaveToStream( object sender )
        {
            MemoryStream dest = new MemoryStream();
            try
            {
                XmlSerializer xs = new XmlSerializer( sender.GetType() );
                xs.Serialize( dest, sender );
                dest.Seek( 0, 0 );
                return dest;
            }
            catch
            {
                return null;
            }
        }
 
        /// <summary>
        /// Загрузка объекта из Xml файла
        /// </summary>
        /// <param name="typeObject">Тип объект, экземпляр класса которого нужно десериализовать</param>
        /// <param name="XmlFileName">Имя xml-файла</param>
        /// <returns>Возвращает десериализованный объект</returns>
        public static object LoadFromXmlFile( Type typeObject, string XmlFileName )
        {
            TextReader tr = new StreamReader( XmlFileName, Encoding.UTF8 );
            try
            {
                XmlSerializer sr = new XmlSerializer( typeObject );
                return sr.Deserialize( tr );
            }
            catch
            {
                return null;
            }
            finally
            {
                tr.Close();
            }
        }
 
        /// <summary>
        /// Сохранение объекта в Xml файл
        /// </summary>
        /// <param name="sender">Объект, экземпляр класса которого нужно сериализовать</param>
        /// <param name="XmlFileName">Имя xml-файла</param>
        /// <param name="connString">Строка соединения с базой данных</param>
        public static void SaveToXmlFile( object sender, string XmlFileName )
        {
            FileInfo fSource = null;
            FileInfo fDest = null;
            string fileName = Path.GetFileName( XmlFileName );
            if (File.Exists( XmlFileName ))
            {
                fSource = new FileInfo( XmlFileName );
                Directory.SetCurrentDirectory( Path.GetDirectoryName( XmlFileName ) );
                fSource.CopyTo( "copy_" + fileName, true );
                fSource = null;
                fDest = new FileInfo( "copy_" + fileName );
                fDest.Attributes = FileAttributes.Hidden;
            }
            TextWriter tw = new StreamWriter( XmlFileName, false, Encoding.UTF8 );
            try
            {
                XmlSerializer sr = new XmlSerializer( sender.GetType() );
                sr.Serialize( tw, sender );
            }
            catch
            {
                tw.Close();
                if (fDest != null)
                    fDest.CopyTo( XmlFileName, true );
                fSource = new FileInfo( XmlFileName );
                fSource.Attributes = FileAttributes.Normal;
                fSource = null;
            }
            finally
            {
                tw.Close();
                if (fDest != null)
                {
                    fDest.Delete();
                    fDest = null;
                }
            }
        }
    }



0



Мохаммед Али

131 / 69 / 5

Регистрация: 14.08.2009

Сообщений: 916

05.07.2011, 11:53

6

Ну ты понаписал) испугал человека, тут дело не в коде сериализации мне кажется а в описании класса обьекта сериализации.



1



Sanprof

96 / 96 / 16

Регистрация: 28.01.2008

Сообщений: 426

05.07.2011, 12:22

7

Цитата
Сообщение от asd321
Посмотреть сообщение

тут дело не в коде сериализации мне кажется а в описании класса обьекта сериализации

десериализация не может быть выполнена, если была выполнена не правильная сериализация.
Filislav, почитайте правила сериализации объектов, там есть пунктик (свойство обязательно должно иметь методы get и set), а у вас

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Dialer     
{
         private ArrayList content = new ArrayList();
         [XmlArray]
         [XmlArrayItem(typeof(Entrie))]
         public IList Cont         
        {
             get
             {
                 return content;
             }
         }
         public Dialer()
         {
         }
}



1



Filislav

339 / 285 / 62

Регистрация: 02.09.2010

Сообщений: 547

05.07.2011, 12:40

 [ТС]

8

Нашел я ошибку у себя, все заработало. И сериализация у меня выполнена просто без лишних наворотов и правильно.
Sanprof, ваш код я конечно же сохранил еще в первый раз.Спасибо. Ошибка была:

Вместо:

C#
1
2
3
4
XmlReader reader = new XmlTextReader(@"D:data.xml");
                XmlSerializer serializer = new XmlSerializer(typeof(Entrie));
                dialer = (Dialer)serializer.Deserialize(reader);
                reader.Close();

Надо было:

C#
1
2
3
4
XmlReader reader = new XmlTextReader(@"D:data.xml");
                XmlSerializer serializer = new XmlSerializer(typeof(Dialer));// здесь исправлено.
                dialer = (Dialer)serializer.Deserialize(reader);
                reader.Close();

Просто просмотрел.



0



Мохаммед Али

131 / 69 / 5

Регистрация: 14.08.2009

Сообщений: 916

05.07.2011, 12:41

9

да да он прав чо то я упустил)



0



Filislav

339 / 285 / 62

Регистрация: 02.09.2010

Сообщений: 547

05.07.2011, 13:21

 [ТС]

10

Вопрос не по теме, касаемо моей программы. Как мне ArrayList отсортировать. Мне надо чтобы в DataGridView выводил в порядке возрастания даты. Свойва OrderBy() у нее нету. Подскажите плиз.
Вот в этом куске кода.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
   private void monthCalendar2_DateSelected(object sender, DateRangeEventArgs e)
        {
            dt.Clear();
            foreach (Entrie en in dialer.Cont)
            {
                if (monthCalendar2.SelectionStart.ToShortDateString() == en.Dt.ToShortDateString())
                {
                    dt.Rows.Add(en.Dt.ToShortDateString(), en.Time.ToLongTimeString(), en.Tip, en.Opisanie);
                }
 
            }
            dataGridView1.DataSource = dt;
        }

Сортировка нужна по en.Dt.ToShortDateString().



0



96 / 96 / 16

Регистрация: 28.01.2008

Сообщений: 426

05.07.2011, 13:28

11

Filislav, почитайте про лямбда-выражения, в инете много ссылок как сортировать листы.



1



There is no problem with serialize but deserializing throw error like below. I shared all related classes and error. What should I do to deserialize this file.

yaml file (created by yaml serializing) :

  Edits:   0:
        Id: 20
        Type: AddOrUpdate
        Operation:
          book:
            ElementName: a
            ArithmeticExpression: asd
            ConditionExpression: a

c# classes :

 public class DbContext
        {
            public Dictionary<int, DbModel> Edits { get; set; }
        }



      public class DbModel
        {
            public int Id { get; set; }
            public string Type { get; set; }
            public Dictionary<string, Operation> Operation { get; set; }


            public DbModel(int id, string type, Dictionary<string, Operation> op)
            {
                Id = id;
                Type = type;
                Operation = op;
            }
        }
    public class Operation
    {
        public string ElementName { get; set; }
        public string ArithmeticExpression { get; set; }
        public string ConditionExpression { get; set; }

        public Operation(string elemName, string ArithmetticExp, string ConditionExp)
        {
            ElementName = elemName;
            ArithmeticExpression = ArithmetticExp;
            ConditionExpression = ConditionExp;
        }

    }

class DatabaseOperation
{
    public static DbContext DbContext { get; set; }
    public const string yamlEditString = "C:\Data\setting.yml";

    static DatabaseOperation()
    {
        DbContext = ReadAllDataFromFile().Result;
    }

    public static Task<DbContext> ReadAllDataFromFile()
    {
        DbContext dbCon = new DbContext();
        if (File.Exists(yamlEditString))
        {

            var deserializer = new Deserializer();

            string readedData = File.ReadAllText(yamlEditString);
            //dbCon.Edits = deserializer.Deserialize<List<DbModel>>(readedData);
            try
            {
                dbCon = deserializer.Deserialize<DbContext>(readedData);
            }
            catch (Exception ex)
            {

                throw;
            }

        }
        else
        {
            dbCon.Edits = new Dictionary<int, DbModel>();
        }
        return Task.FromResult(dbCon);
    }
    public static Task WriteAllDataToFile(DbContext dbCon)
    {
        var serializer = new Serializer();
        File.WriteAllText(yamlEditString, serializer.Serialize(dbCon));
    }
}

getting this error :
(Line: 7, Col: 9, Idx: 86) — (Line: 7, Col: 9, Idx: 86): Exception during deserialization

«YamlDotNet»

inner exception :

Failed to create an instance of type ‘YamlEdit.Operation’.

at
YamlDotNet.Serialization.ObjectFactories.DefaultObjectFactory.Create(Type
type) at
YamlDotNet.Serialization.NodeDeserializers.ObjectNodeDeserializer.YamlDotNet.Serialization.INodeDeserializer.Deserialize(IParser
parser, Type expectedType, Func`3 nestedObjectDeserializer, Object&
value) at
YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.DeserializeValue(IParser
parser, Type expectedType, SerializerState state, IValueDeserializer
nestedObjectDeserializer)

StackTrace :

   at YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.DeserializeValue(IParser parser, Type expectedType, SerializerState state, IValueDeserializer nestedObjectDeserializer)
   at YamlDotNet.Serialization.ValueDeserializers.AliasValueDeserializer.DeserializeValue(IParser parser, Type expectedType, SerializerState state, IValueDeserializer nestedObjectDeserializer)
   at YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.<>c__DisplayClass3_0.<DeserializeValue>b__0(IParser r, Type t)
   at YamlDotNet.Serialization.NodeDeserializers.DictionaryNodeDeserializer.DeserializeHelper(Type tKey, Type tValue, IParser parser, Func`3 nestedObjectDeserializer, IDictionary result)
   at YamlDotNet.Serialization.NodeDeserializers.DictionaryNodeDeserializer.YamlDotNet.Serialization.INodeDeserializer.Deserialize(IParser parser, Type expectedType, Func`3 nestedObjectDeserializer, Object& value)
   at YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.DeserializeValue(IParser parser, Type expectedType, SerializerState state, IValueDeserializer nestedObjectDeserializer)
   at YamlDotNet.Serialization.ValueDeserializers.AliasValueDeserializer.DeserializeValue(IParser parser, Type expectedType, SerializerState state, IValueDeserializer nestedObjectDeserializer)
   at YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.<>c__DisplayClass3_0.<DeserializeValue>b__0(IParser r, Type t)
   at YamlDotNet.Serialization.NodeDeserializers.ObjectNodeDeserializer.YamlDotNet.Serialization.INodeDeserializer.Deserialize(IParser parser, Type expectedType, Func`3 nestedObjectDeserializer, Object& value)
   at YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.DeserializeValue(IParser parser, Type expectedType, SerializerState state, IValueDeserializer nestedObjectDeserializer)
   at YamlDotNet.Serialization.ValueDeserializers.AliasValueDeserializer.DeserializeValue(IParser parser, Type expectedType, SerializerState state, IValueDeserializer nestedObjectDeserializer)
   at YamlDotNet.Serialization.Deserializer.Deserialize(IParser parser, Type type)
   at YamlDotNet.Serialization.Deserializer.Deserialize[T](String input)
   at YamlEdit.DatabaseOperation.ReadAllDataFromFile() in D:RepositoriesYamlEditDatabaseOperation.cs:line 35

There is no problem with serialize but deserializing throw error like below. I shared all related classes and error. What should I do to deserialize this file.

yaml file (created by yaml serializing) :

  Edits:   0:
        Id: 20
        Type: AddOrUpdate
        Operation:
          book:
            ElementName: a
            ArithmeticExpression: asd
            ConditionExpression: a

c# classes :

 public class DbContext
        {
            public Dictionary<int, DbModel> Edits { get; set; }
        }



      public class DbModel
        {
            public int Id { get; set; }
            public string Type { get; set; }
            public Dictionary<string, Operation> Operation { get; set; }


            public DbModel(int id, string type, Dictionary<string, Operation> op)
            {
                Id = id;
                Type = type;
                Operation = op;
            }
        }
    public class Operation
    {
        public string ElementName { get; set; }
        public string ArithmeticExpression { get; set; }
        public string ConditionExpression { get; set; }

        public Operation(string elemName, string ArithmetticExp, string ConditionExp)
        {
            ElementName = elemName;
            ArithmeticExpression = ArithmetticExp;
            ConditionExpression = ConditionExp;
        }

    }

class DatabaseOperation
{
    public static DbContext DbContext { get; set; }
    public const string yamlEditString = "C:\Data\setting.yml";

    static DatabaseOperation()
    {
        DbContext = ReadAllDataFromFile().Result;
    }

    public static Task<DbContext> ReadAllDataFromFile()
    {
        DbContext dbCon = new DbContext();
        if (File.Exists(yamlEditString))
        {

            var deserializer = new Deserializer();

            string readedData = File.ReadAllText(yamlEditString);
            //dbCon.Edits = deserializer.Deserialize<List<DbModel>>(readedData);
            try
            {
                dbCon = deserializer.Deserialize<DbContext>(readedData);
            }
            catch (Exception ex)
            {

                throw;
            }

        }
        else
        {
            dbCon.Edits = new Dictionary<int, DbModel>();
        }
        return Task.FromResult(dbCon);
    }
    public static Task WriteAllDataToFile(DbContext dbCon)
    {
        var serializer = new Serializer();
        File.WriteAllText(yamlEditString, serializer.Serialize(dbCon));
    }
}

getting this error :
(Line: 7, Col: 9, Idx: 86) — (Line: 7, Col: 9, Idx: 86): Exception during deserialization

«YamlDotNet»

inner exception :

Failed to create an instance of type ‘YamlEdit.Operation’.

at
YamlDotNet.Serialization.ObjectFactories.DefaultObjectFactory.Create(Type
type) at
YamlDotNet.Serialization.NodeDeserializers.ObjectNodeDeserializer.YamlDotNet.Serialization.INodeDeserializer.Deserialize(IParser
parser, Type expectedType, Func`3 nestedObjectDeserializer, Object&
value) at
YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.DeserializeValue(IParser
parser, Type expectedType, SerializerState state, IValueDeserializer
nestedObjectDeserializer)

StackTrace :

   at YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.DeserializeValue(IParser parser, Type expectedType, SerializerState state, IValueDeserializer nestedObjectDeserializer)
   at YamlDotNet.Serialization.ValueDeserializers.AliasValueDeserializer.DeserializeValue(IParser parser, Type expectedType, SerializerState state, IValueDeserializer nestedObjectDeserializer)
   at YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.<>c__DisplayClass3_0.<DeserializeValue>b__0(IParser r, Type t)
   at YamlDotNet.Serialization.NodeDeserializers.DictionaryNodeDeserializer.DeserializeHelper(Type tKey, Type tValue, IParser parser, Func`3 nestedObjectDeserializer, IDictionary result)
   at YamlDotNet.Serialization.NodeDeserializers.DictionaryNodeDeserializer.YamlDotNet.Serialization.INodeDeserializer.Deserialize(IParser parser, Type expectedType, Func`3 nestedObjectDeserializer, Object& value)
   at YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.DeserializeValue(IParser parser, Type expectedType, SerializerState state, IValueDeserializer nestedObjectDeserializer)
   at YamlDotNet.Serialization.ValueDeserializers.AliasValueDeserializer.DeserializeValue(IParser parser, Type expectedType, SerializerState state, IValueDeserializer nestedObjectDeserializer)
   at YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.<>c__DisplayClass3_0.<DeserializeValue>b__0(IParser r, Type t)
   at YamlDotNet.Serialization.NodeDeserializers.ObjectNodeDeserializer.YamlDotNet.Serialization.INodeDeserializer.Deserialize(IParser parser, Type expectedType, Func`3 nestedObjectDeserializer, Object& value)
   at YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.DeserializeValue(IParser parser, Type expectedType, SerializerState state, IValueDeserializer nestedObjectDeserializer)
   at YamlDotNet.Serialization.ValueDeserializers.AliasValueDeserializer.DeserializeValue(IParser parser, Type expectedType, SerializerState state, IValueDeserializer nestedObjectDeserializer)
   at YamlDotNet.Serialization.Deserializer.Deserialize(IParser parser, Type type)
   at YamlDotNet.Serialization.Deserializer.Deserialize[T](String input)
   at YamlEdit.DatabaseOperation.ReadAllDataFromFile() in D:RepositoriesYamlEditDatabaseOperation.cs:line 35

Я десериализирую следующий файл XML. Использование XML-сериализатора с VSTS 2008 + С# +.Net 3.5.

Вот файл XML.

<?xml version="1.0" encoding="utf-8"?>
<Person><Name>=b?olu</Name></Person>

Вот снимок экрана для отображения файла XML и двоичного формата файла XML,

alt text

alt text

Если есть какие-то решения принять таких персонажей, это будет здорово! Поскольку мой XML файл большой, и если такие символы действительно недопустимы и должны быть отфильтрованы, я хочу сохранить оставшееся содержимое XML файла после десериализации.

В настоящее время десериализация XML завершается с InvalidOperationException, и вся информация XML файла будет потеряна.

На самом деле, при открытии этого XML файла в VSTS возникает ошибка, подобная этой: ошибка 1 символа ‘?’, Шестнадцатеричное значение 0xffff недопустимо в документах XML. Я запутался, так как в двоичной форме нет значений 0xffff.

Любые решения или идеи?

EDIT1: вот мой код, который используется для десериализации файла XML,

    static void Foo()
    {
        XmlSerializer s = new XmlSerializer(typeof(Person));
        StreamReader file = new StreamReader("bug.xml");
        s.Deserialize(file);
    }

public class Person
{
    public string Name;
}

Всем доброго времени суток, написал 2 метода 1-й сериализации, 2-й — десериализации, и при десериализации получаю следующие исключение:

Не удалось привести тип объекта «System.Int32» к типу
«binary.Classes.Serializ».

[Serializable]
    class Serializ
    {
        public Int32 Line { get; set; }

        BinaryFormatter formatter = new BinaryFormatter();
        public void SerializSave (Int32 _line)
        {
            Line = _line;

            using (FileStream fs = new FileStream(@"E:DELETEnr.dat", FileMode.Append))
            {
                formatter.Serialize(fs, Line);

                Console.WriteLine("Объект сериализован");
            }
        }

        public void SerializRead()
        {
            using (FileStream fs = new FileStream(@"E:DELETEnr.dat", FileMode.Open))
            {
                Serializ _serial = (Serializ)formatter.Deserialize(fs);

                Console.WriteLine("Объект десериализован");

                Console.WriteLine("Прочитано: {0}", _serial.Line);
            }
        }
    }

Как исправить ошибку данного характера ? что я не так сделал ? спасибо

Спасибо за пример, но теперь я получаю такое исключение:

Additional information: Тип
«System.Runtime.Serialization.Formatters.Binary.BinaryFormatter» в
сборке «mscorlib, Version=4.0.0.0, Culture=neutral,

Пробовал и так FileMode.Append и так FileMode.Create
Странно что на этот раз не так? и еще хотел спросить FileMode.Create — даст мне дозапись данных в файл ? мне это важно. Спасибо

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Ошибка при загрузке basic документа script xlb
  • Ошибка при загрузке гта 5 social club нажмите повтор