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

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

Последние изменения: 2022-02-10

Ошибка:

При подключении ТСД к клиенту появляется следующая ошибка:

"Внутренняя ошибка открытия документа. Подробности смотрите в errors.log"

В логе присутствует следующая ошибка:

Ошибка при открытии документа 
MESSAGE:    Ошибка при десериализации файла 'ApplicationMobileSMARTSConfigurationCleverence.Warehouse.Environment.xml', смещение: 1865

Решение:

Данная ошибка означает, что на ТСД находится битый файл конфигурации. Скопируйте из папки «стандартная конфигурация» в папку «текущая конфигурация» согласно таблице (Папки и их содержимое) и перевыгрузите номенклатуру.

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

Последние изменения: 10.02.2022

Ошибка:

При подключении ТСД к клиенту появляется следующая ошибка:

"Внутренняя ошибка открытия документа. Подробности смотрите в errors.log"

В логе присутствует следующая ошибка:

Ошибка при открытии документа 
MESSAGE:    Ошибка при десериализации файла 'ApplicationMobileSMARTSConfigurationCleverence.Warehouse.Environment.xml', смещение: 1865

Решение:

Данная ошибка означает, что на ТСД находится битый файл конфигурации. Скопируйте из папки «стандартная конфигурация» в папку «текущая конфигурация» согласно таблице (Папки и их содержимое) и перевыгрузите номенклатуру.

Клиент работает с двумя терминалами 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:Datasetting.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:Datasetting.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 — даст мне дозапись данных в файл ? мне это важно. Спасибо

Filislav

339 / 285 / 62

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

Сообщений: 547

1

05.07.2011, 10:12. Показов 10186. Ответов 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

Ваш код, в том виде, в котором он приведен в вопросе, работает. В нем, правда, XML зачем-то прогоняется через XmlDocument вместо прямой записи в файл, но на результат это не влияет. Т.е. код вида

SerializeObject(obj, @"some.xml");
DeSerializeObject<ArrayOfApiData>(@"some.xml");

возвращает копию оригинального объекта. Вот только XML при этом отличается от приведенного в примере. Он начинается с

<?xml version="1.0"?>

Т.е. тот XML, который у вас приведен — это не результат работы кода из вопроса. И он вполне может быть битым. Например, у него может быть неправильный BOM — первые байты файла, задающие формат. При несоответствии из кодировке, указанной в <?xml>, чтение документа упадет именно с такой ошибкой.

Уберите лишний код из своего сериализатора и десериализатора, это скорее всего уберет ошибку:

var serializer = new XmlSerializer(serializableObject.GetType());
using (var stream = File.Create(fileName))
{
    serializer.Serialize(stream, serializableObject);
}

var serializer = new XmlSerializer(typeof(T));
using (var stream = File.OpenRead(fileName))
{
    return (T)serializer.Deserialize(stream);
}

My teacher provide me the serilaized file.. I have not created it my self .. while deserilaizing the file i get following error

java.io.InvalidClassException: netflix.memreader.FeatureWriter; local class incompatible: stream classdesc serialVersionUID = 3279065858639389501, local class serialVersionUID = -7190666486441488760
    at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:562)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1583)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
    at netflix.memreader.FeatureWriter.deserialize(FeatureWriter.java:327)
    at netflix.memreader.MemReader.readFeaturesFromMem(MemReader.java:811)
    at netflix.memreader.MemReader.main(MemReader.java:727)
Exception in thread "main" java.lang.NullPointerException
    at netflix.memreader.MemReader.readFeaturesFromMem(MemReader.java:814)
    at netflix.memreader.MemReader.main(MemReader.java:727)

PM 77-1's user avatar

PM 77-1

12.9k21 gold badges67 silver badges110 bronze badges

asked Oct 31, 2014 at 5:58

Aiza malik's user avatar

3

As the exception says ,

local class incompatible: stream classdesc serialVersionUID, local
class serialVersionUID

The serialized object has the different serialVersionUID . when you are trying to de-serialize the object , the comipler will genrate the serialVersionUID if you dont specify the default one.

serialVersionUID may vary on same objects across different compilers (on various platforms). You may add the ,

private static final long serialVersionUID = -7190666486441488760;

answered Oct 31, 2014 at 6:09

Santhosh's user avatar

SanthoshSanthosh

8,1813 gold badges29 silver badges56 bronze badges

1


Просмотр полной версии : Проблема с созданием экземпляра com-объекта на сервере


Добрый день,
AX2009 интегрирую с внешней системой.

Внешняя система предоставляет com-объект для манипуляций с ней,
в AX2009 запилил класс для запуска в пакетном режиме, который будет периодически обменивается данными с внешней системой посредством использования экземпляра данного com-объекта.

Для начала сделал по-старинке:
класс клиентский, пакетный сервер запускается в отдельной клиентской сессии.
Все работает.
Можно переводить и на серверный вариант, чтобы не париться с клиентской сессией.

Поставил RunOn = Server.
Метод new подпилил так:

void new()
{
InteropPermission p;
;
super();

p = new InteropPermission(InteropKind::ComInterop);
p.assert();
storageConnector = new COM(«Cleverence.Warehouse.StorageConnector»);
// storageConnector = new COM(«CDO.Message»); // для проверки создаются ли другие объекты
CodeAccessPermission::revertAssert();
}

Пробую. Получаю:
COM-объект класса «Cleverence.Warehouse.StorageConnector» не удалось создать. Убедитесь, что объект был должным образом зарегистрирован на компьютере «AOS-DEV-01V».
Убедился.

На указанном AOS установлен также и клиент. Открываю его.
Ставлю у класса RunOn = Client — запускается.
Ставлю у класса RunOn = Server — указанная выше ошибка.

Под доменным админом то же самое.

Другие объекты типа CDO.Message или ADODB.Recordset создаются нормально при любом значении RunOn.

Если кто в состоянии, подскажите, пожалуйста, в каком направлении копать.


Нужно искать 64-битный вариант COM-объекта «Cleverence.Warehouse.StorageConnector».
Либо АОС делать 32-битным.


Либо париться с клиентской сессией :)


Здесь прописано как запустить СОМ коннектор 1с8х в режиме 32 бит на 64-битовом сервере.
http://gilev.ru/1c/hasp/
в ссылке есть пункт
15. Для COM-соединений к 64х битному серверу приложений использование возможно только на том компьютере, на котором установлен ключ 64-разрядного сервера 1С:Предприятия (и не из терминальной сессии).
Для использования V81.COMConnector на компьютерах, которым доступны только клиентские ключи, можно зарегистрировать 32-разрядный V81.COMConnector в COM+.
— запустите Component Services;
— создайте пустое COM+ приложение с Activation type — Server application и именем, например, V81_COMConnector, укажите имя пользователя Windows, от имени которого компонента будет запускаться в адресном пространстве отдельного процесса dllhost.exe;
— в ветке Components добавьте новую компоненту comcntr.dll из каталога загрузочных модулей 1С:Предприятия.
В этом случае V81.COMConnector будет запускаться в отдельном 32-разрядном процессе и может использоваться как 32-разрядными, так и 64-разрядными приложениями.

Данная рекомендация была использована как для СОМ коннектора 1с (не было ключей 64-бит), так и еще для одной компоненты СОМ сторонней фирмы, под которую не было 64- битовой dll.
Пакеты ax2009 АОС 64-бит Window server 2008 sp2 работают с этими СОМ компонентами, проблем не было.


Всем привет.
Обновил версию 1с до 8.2., теперь интеграция с АХ 2009 SP1 накрылась медным тазом. Добавил новое приложение com+ (как в сообщении выше), загрузил компоненту из папки с установленным 1с8.2. Импорт поставщиков из 1С в АХ 2009 не работает: «COM-объект класса «V81.COMConnector» не удалось создать. Убедитесь, что объект был должным образом зарегистрирован на компьютере «AX-DEMO».» Зачем-то АХ 2009 упорно сигнализирует о том, что используется объект V81* которого уже впомине нет. В макросе используется следующее. Перепробывал все варианты.
//define.COMConnectorProgId(«V81.COMConnector») // исходник
//define.COMConnectorProgId(«V82.COMConnector») // второе чтение
define.COMConnectorProgId(«82.COMConnector.1») // по принципу названия компоненты в component services

В методе поиска/создания ком объекта, если последний не нашелся, указано:
comConnector = new COM( #COMConnectorProgId);//V81.COMConnector

Сервер перезагружал. АОС тоже. Поможите кто чем богат на знания.


Попробуйте для начала не использовать макрос, а явно указать строку «V82.COMConnector»


Всем привет!
Помогите пожалуйста решить подобную проблему. Создал на сервере (Windows Server 2008 R2 Standard SP1, 64bit) приложение COM+, как описано выше (от имени Network Service). Объект создается, но на методе Connect все намертво виснет (DAX 4.0):

c1COMObj = new COM(«V82.COMConnector»);
connection = c1COMObj.Connect(«Srvr=»» + c1Params.DBCluster + «»;Ref=»» + c1Params.DBClusterName + «»;Usr=»» + c1Params.User1C + «»;Pwd=»» + c1Params.User1CPassword + «»;»);

При этом для «V82.Application» все работает.
comcntr.dll нашел 2 штуки — в Program Files и в Program Files (x86). Пробовал подставлять обе, результат один. В чем может быть дело?


Основные моменты при создании приложений COM+:

1. Когда создаете приложение COM+, указывайте, что это серверное приложение;
2. Далее в мастере создания в окне «Удостоверение приложения» необходимо указать пользователя и пароль от имени которого стартует АОС;
3. Далее в мастере создания в окне «Добавление пользователей и ролей» также необходимо добавить пользователя от имени которого стартует АОС;
4. При создании конкретного компонента внутри приложения COM+ выбирайте библиотеку comcntr.dll из папки «Program Files (x86)».

Нижеприведенный код должен отрабатывать без проблем:

new InteropPermission(InteropKind::ComInterop).assert();

COMconnector = new COM(this.getCOMConnectorProg());

CodeAccessPermission::revertAssert();

где функция getCOMConnectorProg() имеет вид:

private str getCOMConnectorProg()
{
str getCOMConnectorProg;
;
switch(Version)
{
case ::V80 :
getCOMConnectorProg = #V80_COMConnector;
break;
case ::V81 :
getCOMConnectorProg = #V81_COMConnector;
break;
case ::V82 :
getCOMConnectorProg = #V82_COMConnector;
break;
default :
throw error(strFmt(«Для версии %1 не реализовано»,Version));
}

return getCOMConnectorProg;
}

макросы:

#define.V80_COMConnector(‘V8.COMConnector’)
#define.V81_COMConnector(‘V81.COMConnector’)
#define.V82_COMConnector(‘V82.COMConnector’)


Огромное спасибо! Заработало. Похоже ключевым был пользователь, от имени которого запускается АОС.


Еще раз всем привет!
К сожалению, проблема решена не полностью. При вызове любой функции 1С, например:
result = connection.axSyncClient(«Test»);
вылетает ошибка, в данном случае: «Метод «axSyncClient» в COM-объекте класса «<неизвестно>» возвратил код ошибки 0x80020009 (DISP_E_EXCEPTION), который означает: {ОбщийМодуль.ВнешниеПроцедуры.Модуль(340,4)}: Процедура или функция с указанным именем не определена (ВвестиЗначение).»
Такая функция в 1С точно есть, для «V82.Application» это работает. Подскажите пожалуйста, в чем может быть дело?


Еще раз всем привет!
К сожалению, проблема решена не полностью. При вызове любой функции 1С, например:
result = connection.axSyncClient(«Test»);
вылетает ошибка, в данном случае: «Метод «axSyncClient» в COM-объекте класса «<неизвестно>» возвратил код ошибки 0x80020009 (DISP_E_EXCEPTION), который означает: {ОбщийМодуль.ВнешниеПроцедуры.Модуль(340,4)}: Процедура или функция с указанным именем не определена (ВвестиЗначение).»
Такая функция в 1С точно есть, для «V82.Application» это работает. Подскажите пожалуйста, в чем может быть дело?

Не путайте COM и OLE.

В данном случае «V82.Application» — это OLE.

А функция «ВвестиЗначение» — функция клиентского исполнения, которая представляет собой показ диалога для ввода значение переданного типа и требует работы с интерфейсной составляющей платформы 1С. Через COM-объект («V82.COMConnector») она работать не будет.


Но там и не должно быть никакого диалога. Функция должна отработать без взаимодействия с пользователем и вернуть результат в виде текстовой строки. Может быть для работы через COMConnector функции в 1С должны быть написаны с учетом некоторых ограничений?


Функция «ВвестиЗначение» — это функция глобального контекста, т.е. функция ядра платформы 1С.

Вот ее описание из встроенной справки:

Вызывает диалог для ввода значения заданного типа. Если тип переменной не определен и <Тип> представляет собой составной тип данных, то в поле ввода появляется кнопка выбора типа.

Доступность:
Тонкий клиент, веб-клиент, толстый клиент.

Обратите внимание на раздел «Доступность», среди перечисленного нет «Внешнее соединение», что требуется для работы с процедурами/функциями через COM-соединение.

Касательно вашего случая, возможно, что по бизнес логике функция «ВвестиЗначение» и не вызывается, может быть она даже используется в другой процедуре/функции общего модуля, не в той, которую вы пытаетесь вызвать через COM. Но при подключении через COM и вызове чего-либо из общего модуля, платформа проверяет этот модуль в режиме Внешнего соединения, для которого вызов этой функции недопустим, поэтому у вас и появляется указанная ошибка.

Найдите вот это место «ОбщийМодуль.ВнешниеПроцедуры.Модуль(340,4)» и логику работы функции ВвестиЗначение обрамите в директивы препроцессора:

#Если Клиент Тогда
#КонецЕсли

Я думаю, что проблема у вас пропадет, ну или наткнетесь на другое место неверного вызова функций контекста, не предназначенных для Внешнего соединения.


Спасибо большое! Получилось.


FYI
_________

COM-объект класса «V83.COMConnector.1» не удалось создать
Возможно после обновления 1С получили ошибку при запуске класса, выгружающего данные в 1С в пакетном режиме и запускающего функцию 1С посредством COM LoadData (возможно просто совпало), т.к. до этого момента выгрузка запускалась только вручную.
Вручную класс отрабатывал без ошибки.
Регистрация comcntr.dll в режиме 32 и 64 бит на 64-битовом сервере не помогла.
Помогло добавление пользователей aos-ов — пакетных серверов в роли компоненты приложения COM+


Работает на vBulletin® версия 3.8.5. Copyright ©2000-2023, Jelsoft Enterprises Ltd. Перевод: zCarot

  

Nervosa

26.07.13 — 17:04

Здравствуйте!

Взяли на тест сканер штрихкодов Motorola MC2100. Хочу написать обработку для выгрузки/загрузки данных из/в него. Смотрю в мануал от фирмы CleverenceSoft:

Функции драйвера объединены во внешней компоненте «Addin.Cl.TerminalConnector», содержащейся в библиотеке Cleverence.Warehouse.TerminalConnector.dll в подпапке ControlPanel папки установки драйвера.

Окей. Кладу Cleverence.Warehouse.TerminalConnector.dll в папку bin 1C-ки, а в обработке в методе ПриОткрытии() пишу:

Процедура ПриОткрытии()

    Попытка

        ПрогИД = «AddIn.Cl.TerminalConnector»;

        ПодключитьВнешнююКомпоненту(ПрогИД);

    Исключение

        Сообщить(ОписаниеОшибки());

    КонецПопытки;

КонецПроцедуры

В итоге вижу ошибку — Ошибка при вызове метода контекста (ПодключитьВнешнююКомпоненту): Ошибка при подключении внешней компоненты

Что же я делаю неправильно?

Заранее спасибо.

  

Галахад

1 — 26.07.13 — 17:16

Может регистрировать надо?

  

Nervosa

2 — 26.07.13 — 17:24

И зарегить не даёт — говорит, что модуль Cleverence.Warehouse.TerminalConnector.dll загружен, но точка входа DllRegisterServer не найдена.

  

Grobik

3 — 26.07.13 — 17:26

Наверно нет прав на соответствующую ветку регистра винды.

  

Nervosa

4 — 26.07.13 — 17:32

Сделал себя админом — та же картина.

  

Grobik

5 — 26.07.13 — 17:40

Для начала винда?

  

Nervosa

6 — 26.07.13 — 17:43

7-ка.

  

Nervosa

7 — 29.07.13 — 09:13

И снова здравствуйте! Может на выходных кто-то занимался ТСД Motorola MC2100? :)

  

wowik

8 — 29.07.13 — 09:31

что разрабатываете, велосипед? с драйвером уже идут все необходимы обработки.

  

wowik

9 — 29.07.13 — 09:34

в папке драйвера «Control Panel» есть файл «Зарегистрировать COM.bat».

  

Nervosa

10 — 29.07.13 — 09:35

(8) — тут абсолютно полностью самописная конфигурация, поэтому стандартными обработками воспользоваться, увы, не удастся.

  

wowik

11 — 29.07.13 — 09:39

(10) тогда смотрим содержимое файла (9), запускаем регистрацию от имени администратора. Если не получилось, к администраторам, пусть разбираются с правами.

  

Nervosa

12 — 29.07.13 — 09:44

Ничего не помогло, к сожалению. По прежнему — Ошибка при подключении внешней компоненты. С правами всё в порядке на 100%.

  

wowik

13 — 29.07.13 — 09:48

напишите на суппорт support@cleverence.ru. Возможно, помогут. По крайней мере, попытаются.

  

Nervosa

14 — 31.07.13 — 09:17

По совету wowik я обратился в суппорт Cleverence и мне там действительно помогли :)

Последовательность действий следующая —

1) Устанавливаем выбранный драйвер — в моём случае этот — http://www.cleverence.ru//site.aspx?page=MobileSmarts-1C-Driver.

2) Из папки с установленным ПО Cleverence SoftDriver1CControl Panel запускаем Зарегистрировать COM.bat.

3) Затем в самой 1С 8.1 подключаем следующим образом:

    Попытка

        ПрогИД = «AddIn.Cl.TerminalConnector»;

        ПодключитьВнешнююКомпоненту(ПрогИД);

        Сканер = Новый (ПрогИД);

    Исключение

        Инфо = ИнформацияОбОшибке();

        Сообщить(«Описание=’» + Инфо.Описание + «‘»);

    КонецПопытки;

Всё работает!

Моя же ошибка заключалась в том, что я не просто запускал Зарегистрировать COM.bat, но и копировал Cleverence.Warehouse.TerminalConnector.dll в 1Сbin, чего делать не стоило.

В общем респект ребятам, они действительно помогли :)

  

0xFFFFFF

15 — 31.07.13 — 09:23

(0) «. Хочу написать обработку для выгрузки/загрузки данных из/в него»

И зачем вам такой геморрой… RDP и обработка в режиме рабочего стола снимает все вопросы.

  

wowik

16 — 31.07.13 — 09:54

  

wowik

17 — 31.07.13 — 09:55

(16) в комментариях обсуждение

  

Nervosa

18 — 31.07.13 — 10:11

(15) конфигурация 1С полностью самописная, обработка работает с остатками.

Filislav

339 / 285 / 62

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

Сообщений: 547

1

05.07.2011, 10:12. Показов 10267. Ответов 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



New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement. We’ll occasionally send you account related emails.

Already on GitHub?
Sign in
to your account

Labels

bug

Something isn’t working

Ваш код, в том виде, в котором он приведен в вопросе, работает. В нем, правда, XML зачем-то прогоняется через XmlDocument вместо прямой записи в файл, но на результат это не влияет. Т.е. код вида

SerializeObject(obj, @"some.xml");
DeSerializeObject<ArrayOfApiData>(@"some.xml");

возвращает копию оригинального объекта. Вот только XML при этом отличается от приведенного в примере. Он начинается с

<?xml version="1.0"?>

Т.е. тот XML, который у вас приведен — это не результат работы кода из вопроса. И он вполне может быть битым. Например, у него может быть неправильный BOM — первые байты файла, задающие формат. При несоответствии из кодировке, указанной в <?xml>, чтение документа упадет именно с такой ошибкой.

Уберите лишний код из своего сериализатора и десериализатора, это скорее всего уберет ошибку:

var serializer = new XmlSerializer(serializableObject.GetType());
using (var stream = File.Create(fileName))
{
    serializer.Serialize(stream, serializableObject);
}

var serializer = new XmlSerializer(typeof(T));
using (var stream = File.OpenRead(fileName))
{
    return (T)serializer.Deserialize(stream);
}

  • Ошибка при десериализации ответа
  • Ошибка при десериализации json
  • Ошибка при декодировании заполнения oaep windows admin center
  • Ошибка при декодировании заполнения oaep delphi
  • Ошибка при ддос атаке