Ошибка при создании документа xml

XML Сериализация. Ошибка C# Решение и ответ на вопрос 1464466

DCNick3

4 / 4 / 6

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

Сообщений: 101

1

01.06.2015, 00:08. Показов 6658. Ответов 2

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


Пытаюсь сериализировать — Фиг

Exception

Необработанное исключение типа «System.InvalidOperationException» в System.Xml.dll

Дополнительные сведения: Ошибка при создании документа XML.

Привожу классы:

Class’ы

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
[Serializable()]
    public class Scene
    {
        public static Scene Load(string file)
        {
            Stream loadStream = File.Open(file, FileMode.Open);
            XmlSerializer serializer = new XmlSerializer(typeof(Scene));
            return (Scene)serializer.Deserialize(loadStream);
        }
 
        internal static void Save(string file, Scene obj)
        {
            Stream saveStream = File.Open(file, FileMode.Create);
            XmlSerializer serializer = new XmlSerializer(typeof(Scene));
            serializer.Serialize(saveStream, obj);
        }
 
        public void Draw(SpriteBatch spriteBatch)
        {
            foreach (var element in elements)
                element.Draw(spriteBatch);
        }
 
        public SceneElement[] elements = new SceneElement[] { };
    }
 
    [Serializable()]
    public abstract class SceneElement
    {
        public int posX;
        public int posY;
        public bool isDrawOriginInCenter;
        public Color color;
        public float rotation;
 
        public abstract void Draw(SpriteBatch spriteBatch);
    }
 
    [Serializable()]
    public class SceneElementImage : SceneElement
    {
        public string texture;
        public int targetHeight;
        public int targetWidth;
 
        public override void Draw(SpriteBatch spriteBatch)
        {
            Texture2D ttexture = ContentRegistry.textureRegistry[texture];
            Vector2 origin = Vector2.Zero;
            if (isDrawOriginInCenter)
                origin = new Vector2(targetWidth, targetHeight) / 2.0F;
 
            spriteBatch.Draw(ttexture, new Rectangle(posX, posY, targetWidth, targetHeight), null, color, rotation, origin, SpriteEffects.None, 0);
        }
    }
 
    [Serializable()]
    public class SceneElementLabel : SceneElement
    {
        public string text;
        public string font;
        
 
        public override void Draw(SpriteBatch spriteBatch)
        {
            SpriteFont sFont = ContentRegistry.spriteFontRegistry[font];
            Vector2 origin = Vector2.Zero;
            if (isDrawOriginInCenter)
                origin = sFont.MeasureString(text) / 2.0F;
 
            spriteBatch.DrawString(sFont, text, new Vector2(posX, posY), color, rotation, origin, 1, SpriteEffects.None, 0);
        }
    }

Может проблема в абстрактах… Кароч выручайте, как можно изменить.
На эти классы сильно ничего не завязано, т.ч. можно менять (без потери возможностей).
Вот.

P.S. BinaryFormatter не пойдёт, ибо фалы человеки писать будут (в основном будем их читать)

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Programming

Эксперт

94731 / 64177 / 26122

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

Сообщений: 116,782

01.06.2015, 00:08

Ответы с готовыми решениями:

Сериализация в Xml в С#
Доброе всем время суток! Нужна помощь по сериализации.
Есть несколько проблем:
1) при попытке…

XML сериализация
Добрый день!

1. Как при сериализации

XmlSerializer xmlSerializer = new…

Сериализация в xml
Имеется несколько классов следующего вида (схематично):
public class A
{
public List<B> b =…

XML сериализация списка
По какой схеме нужно сериализовать однонаправленный упорядоченный список? Просмотр всех элементов,…

2

Someone007

Эксперт .NET

6270 / 3898 / 1567

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

Сообщений: 9,189

01.06.2015, 04:33

2

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
    [Serializable]
    public class Scene
    {
        public static Scene Load(string file)
        {
            using (Stream loadStream = File.Open(file, FileMode.Open))
            {
                XmlSerializer serializer = new XmlSerializer(typeof(Scene));
                return (Scene)serializer.Deserialize(loadStream);
            }
        }
 
        internal static void Save(string file, Scene obj)
        {
            using (Stream saveStream = File.Open(file, FileMode.Create))
            {
                XmlSerializer serializer = new XmlSerializer(typeof(Scene));
                serializer.Serialize(saveStream, obj);
            }
        }
 
        public void Draw(SpriteBatch spriteBatch)
        {
            foreach (var element in elements)
                element.Draw(spriteBatch);
        }
 
        public List<SceneElement> elements = new List<SceneElement>();
    }
 
    [Serializable]
    [XmlInclude(typeof(SceneElementImage))]
    [XmlInclude(typeof(SceneElementLabel))]
    public abstract class SceneElement
    {
        public int posX;
        public int posY;
        public bool isDrawOriginInCenter;
        public Color color;
        public float rotation;
 
        public abstract void Draw(SpriteBatch spriteBatch);
    }
 
    [Serializable]
    public class SceneElementImage : SceneElement
    {
        public string texture;
        public int targetHeight;
        public int targetWidth;
 
        public override void Draw(SpriteBatch spriteBatch)
        {
            Texture2D ttexture = ContentRegistry.textureRegistry[texture];
            Vector2 origin = Vector2.Zero;
            if (isDrawOriginInCenter)
                origin = new Vector2(targetWidth, targetHeight) / 2.0F;
 
            spriteBatch.Draw(ttexture, new Rectangle(posX, posY, targetWidth, targetHeight), null, color, rotation, origin, SpriteEffects.None, 0);
        }
    }
 
    [Serializable]
    public class SceneElementLabel : SceneElement
    {
        public string text;
        public string font;
 
        public override void Draw(SpriteBatch spriteBatch)
        {
            SpriteFont sFont = ContentRegistry.spriteFontRegistry[font];
            Vector2 origin = Vector2.Zero;
            if (isDrawOriginInCenter)
                origin = sFont.MeasureString(text) / 2.0F;
 
            spriteBatch.DrawString(sFont, text, new Vector2(posX, posY), color, rotation, origin, 1, SpriteEffects.None, 0);
        }
    }
C#
1
2
3
4
5
6
7
8
                Scene s = new Scene();
 
                s.elements.Add(new SceneElementImage());
                s.elements.Add(new SceneElementLabel());
 
                Scene.Save("test.scene", s);
 
                var s2 = Scene.Load("test.scene");



0



DCNick3

4 / 4 / 6

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

Сообщений: 101

01.06.2015, 21:58

 [ТС]

3

Сериализую так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
            SceneElementLabel label = new SceneElementLabel();
            label.text = "Загрузка ...";
            label.posX = 960;
            label.posY = 720;
            label.isDrawOriginInCenter = true;
            label.font = "verdana48";
            label.color = Color.White;
            loadingScene.elements.Add(label);
            Scene.Save("loadingScene.xml", loadingScene);
 
 
            //Где-то ранее
            Scene loadingScene = new Scene();

Добавлено через 3 минуты
Таааак! Раздобыл еще сведений об исключении:

More DATA

System.InvalidOperationException не обработано
HResult=-2146233079
Message=Ошибка при создании документа XML.
Source=System.Xml
StackTrace:
в System.Xml.Serialization.XmlSerializer.Serialize(X mlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
в System.Xml.Serialization.XmlSerializer.Serialize(T extWriter textWriter, Object o, XmlSerializerNamespaces namespaces)
в System.Xml.Serialization.XmlSerializer.Serialize(T extWriter textWriter, Object o)
в MyVisualNovelLanguage.Scene.Save(String file, Scene obj) в C:UsersНикитаdocumentsvisual studio 2015ProjectsMVNLMVNLMVNLMVNLScene.cs:строка 26
в MyVisualNovelLanguage.Game1.Initialize() в C:UsersНикитаdocumentsvisual studio 2015ProjectsMVNLMVNLMVNLMVNLGame1.cs:строка 137
в Microsoft.Xna.Framework.Game.RunGame(Boolean useBlockingRun)
в Microsoft.Xna.Framework.Game.Run()
в MyVisualNovelLanguage.Program.Main(String[] args) в C:UsersНикитаdocumentsvisual studio 2015ProjectsMVNLMVNLMVNLMVNLProgram.cs:строк а 20
InnerException:
HResult=-2146233079
Message=Тип MyVisualNovelLanguage.SceneElementLabel не ожидался. Используйте атрибут XmlInclude или SoapInclude для задания типов, которые не известны как статические.
Source=Microsoft.GeneratedCode
StackTrace:
в Microsoft.Xml.Serialization.GeneratedAssembly.XmlS erializationWriterScene.Write3_SceneElement(String n, String ns, SceneElement o, Boolean isNullable, Boolean needType)
в Microsoft.Xml.Serialization.GeneratedAssembly.XmlS erializationWriterScene.Write4_Scene(String n, String ns, Scene o, Boolean isNullable, Boolean needType)
в Microsoft.Xml.Serialization.GeneratedAssembly.XmlS erializationWriterScene.Write5_Scene(Object o)
InnerException:

Добавлено через 15 минут
РЕШЕНО:

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
[Serializable(), XmlInclude(typeof(SceneElementLabel)), XmlInclude(typeof(SceneElementImage))]
    public class Scene
    {
        public Scene() { }
 
        public static Scene Load(string file)
        {
            Stream loadStream = File.Open(file, FileMode.Open);
            XmlSerializer serializer = new XmlSerializer(typeof(Scene));
            return (Scene)serializer.Deserialize(loadStream);
        }
 
        internal static void Save(string file, Scene obj)
        {
            StreamWriter saveStream = new StreamWriter("scene.xml", false);
            XmlSerializer serializer = new XmlSerializer(typeof(Scene));
            serializer.Serialize(saveStream, obj);
        }
 
        public void Draw(SpriteBatch spriteBatch)
        {
            foreach (var element in elements)
                element.Draw(spriteBatch);
        }
 
        public List<SceneElement> elements = new List<SceneElement>();
    }
 
    [Serializable()]
    public abstract class SceneElement
    {
        public SceneElement() { }
        public int posX;
        public int posY;
        public bool isDrawOriginInCenter;
        public Color color;
        public float rotation;
 
        public abstract void Draw(SpriteBatch spriteBatch);
    }
 
    [Serializable()]
    public class SceneElementImage : SceneElement
    {
        public SceneElementImage() { }
        public string texture;
        public int targetHeight;
        public int targetWidth;
 
        public override void Draw(SpriteBatch spriteBatch)
        {
            Texture2D ttexture = ContentRegistry.textureRegistry[texture];
            Vector2 origin = Vector2.Zero;
            if (isDrawOriginInCenter)
                origin = new Vector2(targetWidth, targetHeight) / 2.0F;
 
            spriteBatch.Draw(ttexture, new Rectangle(posX, posY, targetWidth, targetHeight), null, color, rotation, origin, SpriteEffects.None, 0);
        }
    }
 
    [Serializable()]
    public class SceneElementLabel : SceneElement
    {
        public SceneElementLabel() { }
        public string text;
        public string font;
        
 
        public override void Draw(SpriteBatch spriteBatch)
        {
            SpriteFont sFont = ContentRegistry.spriteFontRegistry[font];
            Vector2 origin = Vector2.Zero;
            if (isDrawOriginInCenter)
                origin = sFont.MeasureString(text) / 2.0F;
 
            spriteBatch.DrawString(sFont, text, new Vector2(posX, posY), color, rotation, origin, 1, SpriteEffects.None, 0);
        }
    }



1



I am writing a web app using MVC3 but when trying to pass an object to the controller and show it it doesn’t seem to recognize the type or something.

I have a Job object, and a JobService returning a Job like this:

public Job View(int jobId)
{
    Job job=_jobRepository.Jobs.Where(x => x.Id == jobId).FirstOrDefault();
    return job;
}

Within the WebService I call View like this:

[WebMethod]
public Job GetJob(GetJobRequest getJobRequest)
{
    var getJobResponse = new GetJobResponse();
    getJobResponse.Job = _jobService.View(getJobRequest.Id);
    return getJobResponse.Job;
}

Then the Controller calls this:

public class JobsController : Controller
{
    public ActionResult Index()
    {
        var jobModel = new JobModel();

        using (var webServiceSoapClient = new WebServiceSoapClient())
        {
            var getJobRequest = new GetJobRequest();
            getJobRequest.Id = 26038;
            jobModel.Job = webServiceSoapClient.GetJob(getJobRequest);
        }
        return View(jobModel);
    }
}

And it’s throwing this error:

System.Web.Services.Protocols.SoapException: Server was unable to process request. —> System.InvalidOperationException: There was an error generating the XML document. —> System.InvalidOperationException: The type System.Data.Entity.DynamicProxies.Job_55765AEC3BD02AFD7E0527408ED5746E1054965A59B82A127B5A688C19C61D5B was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically.
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write9_Job(String n, String ns, Job o, Boolean isNullable, Boolean needType)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write18_GetJobResponse(Object[] p)
at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer13.Serialize(Object objectToSerialize, XmlSerializationWriter writer)
at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
— End of inner exception stack trace —
at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
at System.Web.Services.Protocols.SoapServerProtocol.WriteReturns(Object[] returnValues, Stream outputStream)
at System.Web.Services.Protocols.WebServiceHandler.WriteReturns(Object[] returnValues)
at System.Web.Services.Protocols.WebServiceHandler.Invoke()
— End of inner exception stack trace —

At first I was passing a GetJobResponse to the service but I tried to make it as simple as possible now to get it working and I still can’t figure it out. I have seen that there are other questions suggesting the use of XmlInclude and stuff but it still doesn’t work.

Applying this:

public string SerializeObjectToXMLString(object theObject)
{
    // Exceptions are handled by the caller

    using (System.IO.MemoryStream oStream = new System.IO.MemoryStream())
    {
        System.Xml.Serialization.XmlSerializer oSerializer = new System.Xml.Serialization.XmlSerializer(theObject.GetType());

        oSerializer.Serialize(oStream, theObject);

        return Encoding.Default.GetString(oStream.ToArray());
    }
}

To the Job returned by View in a test it passes the test so I guess the problem comes from my webservice.

Please help meeee :'(

I am writing a web app using MVC3 but when trying to pass an object to the controller and show it it doesn’t seem to recognize the type or something.

I have a Job object, and a JobService returning a Job like this:

public Job View(int jobId)
{
    Job job=_jobRepository.Jobs.Where(x => x.Id == jobId).FirstOrDefault();
    return job;
}

Within the WebService I call View like this:

[WebMethod]
public Job GetJob(GetJobRequest getJobRequest)
{
    var getJobResponse = new GetJobResponse();
    getJobResponse.Job = _jobService.View(getJobRequest.Id);
    return getJobResponse.Job;
}

Then the Controller calls this:

public class JobsController : Controller
{
    public ActionResult Index()
    {
        var jobModel = new JobModel();

        using (var webServiceSoapClient = new WebServiceSoapClient())
        {
            var getJobRequest = new GetJobRequest();
            getJobRequest.Id = 26038;
            jobModel.Job = webServiceSoapClient.GetJob(getJobRequest);
        }
        return View(jobModel);
    }
}

And it’s throwing this error:

System.Web.Services.Protocols.SoapException: Server was unable to process request. —> System.InvalidOperationException: There was an error generating the XML document. —> System.InvalidOperationException: The type System.Data.Entity.DynamicProxies.Job_55765AEC3BD02AFD7E0527408ED5746E1054965A59B82A127B5A688C19C61D5B was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically.
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write9_Job(String n, String ns, Job o, Boolean isNullable, Boolean needType)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write18_GetJobResponse(Object[] p)
at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer13.Serialize(Object objectToSerialize, XmlSerializationWriter writer)
at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
— End of inner exception stack trace —
at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
at System.Web.Services.Protocols.SoapServerProtocol.WriteReturns(Object[] returnValues, Stream outputStream)
at System.Web.Services.Protocols.WebServiceHandler.WriteReturns(Object[] returnValues)
at System.Web.Services.Protocols.WebServiceHandler.Invoke()
— End of inner exception stack trace —

At first I was passing a GetJobResponse to the service but I tried to make it as simple as possible now to get it working and I still can’t figure it out. I have seen that there are other questions suggesting the use of XmlInclude and stuff but it still doesn’t work.

Applying this:

public string SerializeObjectToXMLString(object theObject)
{
    // Exceptions are handled by the caller

    using (System.IO.MemoryStream oStream = new System.IO.MemoryStream())
    {
        System.Xml.Serialization.XmlSerializer oSerializer = new System.Xml.Serialization.XmlSerializer(theObject.GetType());

        oSerializer.Serialize(oStream, theObject);

        return Encoding.Default.GetString(oStream.ToArray());
    }
}

To the Job returned by View in a test it passes the test so I guess the problem comes from my webservice.

Please help meeee :'(

привет, у меня есть следующий код для сериализации xml:

private void SaveButton_Click(object sender, RoutedEventArgs e)
        {
            string savepath;
            SaveFileDialog DialogSave = new SaveFileDialog();
            // Default file extension
            DialogSave.DefaultExt = "txt";
            // Available file extensions
            DialogSave.Filter = "XML file (*.xml)|*.xml|All files (*.*)|*.*";
            // Adds a extension if the user does not
            DialogSave.AddExtension = true;
            // Restores the selected directory, next time
            DialogSave.RestoreDirectory = true;
            // Dialog title
            DialogSave.Title = "Where do you want to save the file?";
            // Startup directory
            DialogSave.InitialDirectory = @"C:/";
            DialogSave.ShowDialog();
            savepath = DialogSave.FileName;
            DialogSave.Dispose();
            DialogSave = null;

            FormSaving abc = new FormSaving();
            if (MajorversionresultLabel != null && MajorversionresultLabel.Content != null && MajorversionLabel.Content.ToString() != string.Empty)
            abc.Majorversion = MajorversionresultLabel.Content.ToString();
            //abc.Minorversion = MinorversionresultLabel.Content.ToString();
            //abc.Projectnumber = ProjectnumberresultLabel.Content.ToString();
            //abc.Buildnumber = BuildnumberresultLabel.Content.ToString();
            //abc.Previousbuildversion = PreviousbuildversionresultLabel.Content.ToString();
            abc.Startzbuildfrom = StartzbuildfromcomboBox.SelectedItem;

            using (Stream savestream = new FileStream(savepath, FileMode.Create))
            {

                    XmlSerializer serializer = new XmlSerializer(typeof(FormSaving));
                    serializer.Serialize(savestream, abc);
            }



        }

ошибка «Произошла ошибка при создании XML-документа» возникает в serializer.Serialize(savestream, abc);

мой класс сохранения формы:

public class FormSaving
        {

            public string Majorversion
            {
                get;

                set;

            }
            public string Minorversion
            {
                get;

                set;

            }
            public string Projectnumber
            {
                get;

                set;

            }
            public string Buildnumber
            {
                get;

                set;

            }
            public string Previousbuildversion
            {
                get;

                set;

            }
            public object Startzbuildfrom
            {
                get;

                set;
            }
    }

кто-нибудь может помочь мне это исправить?

EDIT:

Я пробовал это, но это тоже не работает:

под «кнопкой сохранения»

abc.Startzbuildfrom = StartzbuildfromcomboBox.SelectedItem.ToString();

под «кнопкой загрузки»

StartzbuildfromcomboBox.SelectedItem = abc.Startzbuildfrom;

вот как я заполняю элементы поля со списком:

<ComboBox Height="23" Margin="577,72,497,0" Name="StartzbuildfromcomboBox" VerticalAlignment="Top"><ComboBoxItem>library</ComboBoxItem></ComboBox>

Я
   SFilchakov

10.06.16 — 22:32

Всем привет!

Хочу кое что в хмл запихнуть.

Пишу в модуле объекта обработки

Процедура СоздатьФайлДанныхВыгрузки(СтруктураВыгрузки)

    ЗаписьXML=Новый ЗаписьXML();

    ЗаписьXML.ОткрытьФайл(«d:doc.xml»);

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

\\

И сразу падает:

Ошибка при вызове метода контекста (ОткрытьФайл)

    ЗаписьXML.ОткрытьФайл(«d:doc.xml»);

по причине:

Каталог не обнаружен ‘d:doc.xml’

//////

Хотя все примеры по создания файла xml так и начинаются:

ЗаписьXML=Новый ЗаписьXML();

    ЗаписьXML.ОткрытьФайл(«d:doc.xml»);

///

Пробовал и так:

ЗаписьXML=Новый ЗаписьXML;

    ЗаписьXML.ОткрытьФайл(«d:doc.xml»);

То же самое.

Подскажите, что не так?

   Dmitry1c

1 — 10.06.16 — 22:33

наклонная черта в другую сторону..

   Dmitry1c

2 — 10.06.16 — 22:35

или контекст на сервере

   SFilchakov

3 — 10.06.16 — 22:38

Что значит контекст на сервере?

Это в модуле обработки на 8.3

Поменял наклон, тоже самое.

   Лефмихалыч

4 — 10.06.16 — 22:38

(0) это все происходит на сервере приложений, а там все не так, как у тебя на клиенте

   SFilchakov

5 — 10.06.16 — 22:40

Это надо делать на клиенте что ли?

   SFilchakov

6 — 10.06.16 — 22:42

Спасибо, теперь понял.

А как же желать загрузку выгрузку по регламентному заданию через файл xml? если регламентное задание крутится на сервере, а файл можно создать только на клиенте и перейти с сервера на клиент нельзя?

   Лефмихалыч

7 — 10.06.16 — 23:05

(6) файл можно создать и на сервере. Просто надо создавать его на дисках и в папках, которые существуют на сервере

   Лефмихалыч

8 — 10.06.16 — 23:06

+(7) даже — не просто существуют, а еще и права на запись в них должны быть у пользователя, под которым запущена служба сервера приложений (ragent)

   SFilchakov

9 — 10.06.16 — 23:15

А где этого пользователя можно посмотреть?

  

Стальная Крыса

10 — 11.06.16 — 04:18

На том компьютере, где работает сервер 1С

TurboConf — расширение возможностей Конфигуратора 1С

ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку «Обновить» в браузере.

Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.

Я пишу веб-приложение с использованием MVC3, но при попытке передать объект контроллеру и показать его, похоже, он не распознает тип или что-то еще.

У меня есть объект Job, a JobService возвращает a Job следующим образом:

public Job View(int jobId)
{
    Job job=_jobRepository.Jobs.Where(x => x.Id == jobId).FirstOrDefault();
    return job;
}

В WebService я вызываю View следующим образом:

[WebMethod]
public Job GetJob(GetJobRequest getJobRequest)
{
    var getJobResponse = new GetJobResponse();
    getJobResponse.Job = _jobService.View(getJobRequest.Id);
    return getJobResponse.Job;
}

Затем контроллер вызывает это:

public class JobsController : Controller
{
    public ActionResult Index()
    {
        var jobModel = new JobModel();

        using (var webServiceSoapClient = new WebServiceSoapClient())
        {
            var getJobRequest = new GetJobRequest();
            getJobRequest.Id = 26038;
            jobModel.Job = webServiceSoapClient.GetJob(getJobRequest);
        }
        return View(jobModel);
    }
}

И он бросает эту ошибку:

System.Web.Services.Protocols.SoapException: сервер не смог обработать запрос. — > System.InvalidOperationException: произошла ошибка генерации XML-документа. — > System.InvalidOperationException: Тип System.Data.Entity.DynamicProxies.Job_55765AEC3BD02AFD7E0527408ED5746E1054965A59B82A127B5A688C19C61D5B не ожидался. Используйте атрибут XmlInclude или SoapInclude, чтобы указать типы, которые не известны статически.    в Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write9_Job (String n, String ns, Job o, Boolean isNullable, Boolean needType)    в Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write18_GetJobResponse (Object [] p)    в Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer13.Serialize(Object objectToSerialize, XmlSerializationWriter writer)    в System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces пространства имен, String encodingStyle, String id)    — Конец внутренней проверки стека исключений —    в System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces пространства имен, String encodingStyle, String id)    в System.Web.Services.Protocols.SoapServerProtocol.WriteReturns(Object [] returnValues, Stream outputStream)    в System.Web.Services.Protocols.WebServiceHandler.WriteReturns(Object [] returnValues)    в System.Web.Services.Protocols.WebServiceHandler.Invoke()    — Конец внутренней трассировки стека исключений —

Сначала я передавал GetJobResponse службе, но я попытался сделать ее как можно более простой, чтобы заставить ее работать, и я все еще не могу понять это. Я видел, что есть другие вопросы, предлагающие использование XmlInclude и прочее, но это все еще не работает.

Применяя это:

public string SerializeObjectToXMLString(object theObject)
{
    // Exceptions are handled by the caller

    using (System.IO.MemoryStream oStream = new System.IO.MemoryStream())
    {
        System.Xml.Serialization.XmlSerializer oSerializer = new System.Xml.Serialization.XmlSerializer(theObject.GetType());

        oSerializer.Serialize(oStream, theObject);

        return Encoding.Default.GetString(oStream.ToArray());
    }
}

К заданию, возвращенному View в тесте, проходит тест, поэтому я думаю, что проблема исходит из моего веб-сервиса.

Пожалуйста, помогите meeee: ‘(

Понравилась статья? Поделить с друзьями:
  • Ошибка при создании вопроса попробуйте позже wildberries
  • Ошибка при создании вопроса валберис попробуйте позже что это
  • Ошибка при создании вопроса валберис попробуйте позже что делать
  • Ошибка при создании виртуальной сети internal error failed to initialize a valid firewall backend
  • Ошибка при создании архива