Member 13041059 Ответов: 1

Ошибка десериализации XML-данных в C#


У меня есть SVG-файл в формате XML, я пытаюсь десериализовать XML в объекты C#, но при попытке десериализовать XML-данные он выдает ошибку

Ниже приведен мой код

XmlSerializer serializer = new XmlSerializer(typeof(List<rootobject>));
object objectList = null;
using (StreamReader stream = new StreamReader(@"C:\Users\sana-user\Documents\Visual Studio 2015\Projects\SVGXMLToJsonApp\SVGXMLToJsonApp\File\3rect.svg"))
{
objectList = serializer.Deserialize(stream);
}
Console.WriteLine(objectList);



Ниже приведен мой класс

[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.w3.org/2000/svg")]
    [System.Xml.Serialization.XmlRootAttribute(Namespace = "http://www.w3.org/2000/svg", IsNullable = false)]
    public partial class svg
    {

        private svgStyle styleField;

        private svgG[] gField;

        private string[] textField;

        private decimal versionField;

        private string idField;

        private string xField;

        private string yField;

        private string viewBoxField;

        private string style1Field;

        private string spaceField;

        public svgStyle style
        {
            get
            {
                return this.styleField;
            }
            set
            {
                this.styleField = value;
            }
        }

        [System.Xml.Serialization.XmlElementAttribute("g")]
        public svgG[] g
        {
            get
            {
                return this.gField;
            }
            set
            {
                this.gField = value;
            }
        }

        [System.Xml.Serialization.XmlTextAttribute()]
        public string[] Text
        {
            get
            {
                return this.textField;
            }
            set
            {
                this.textField = value;
            }
        }

        [System.Xml.Serialization.XmlAttributeAttribute()]
        public decimal version
        {
            get
            {
                return this.versionField;
            }
            set
            {
                this.versionField = value;
            }
        }

        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string id
        {
            get
            {
                return this.idField;
            }
            set
            {
                this.idField = value;
            }
        }

        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string x
        {
            get
            {
                return this.xField;
            }
            set
            {
                this.xField = value;
            }
        }

        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string y
        {
            get
            {
                return this.yField;
            }
            set
            {
                this.yField = value;
            }
        }

        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string viewBox
        {
            get
            {
                return this.viewBoxField;
            }
            set
            {
                this.viewBoxField = value;
            }
        }

        [System.Xml.Serialization.XmlAttributeAttribute("style")]
        public string style1
        {
            get
            {
                return this.style1Field;
            }
            set
            {
                this.style1Field = value;
            }
        }

        [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://www.w3.org/XML/1998/namespace")]
        public string space
        {
            get
            {
                return this.spaceField;
            }
            set
            {
                this.spaceField = value;
            }
        }
    }

    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.w3.org/2000/svg")]
    public partial class svgStyle
    {

        private string typeField;

        private string valueField;

        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string type
        {
            get
            {
                return this.typeField;
            }
            set
            {
                this.typeField = value;
            }
        }

        [System.Xml.Serialization.XmlTextAttribute()]
        public string Value
        {
            get
            {
                return this.valueField;
            }
            set
            {
                this.valueField = value;
            }
        }
    }

    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.w3.org/2000/svg")]
    public partial class svgG
    {

        private svgGText textField;

        private svgGRect rectField;

        private string[] textField1;

        private string idField;

        public svgGText text
        {
            get
            {
                return this.textField;
            }
            set
            {
                this.textField = value;
            }
        }

        public svgGRect rect
        {
            get
            {
                return this.rectField;
            }
            set
            {
                this.rectField = value;
            }
        }

        [System.Xml.Serialization.XmlTextAttribute()]
        public string[] Text
        {
            get
            {
                return this.textField1;
            }
            set
            {
                this.textField1 = value;
            }
        }

        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string id
        {
            get
            {
                return this.idField;
            }
            set
            {
                this.idField = value;
            }
        }
    }

    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.w3.org/2000/svg")]
    public partial class svgGText
    {

        private string idField;

        private string transformField;

        private string classField;

        private string valueField;

        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string id
        {
            get
            {
                return this.idField;
            }
            set
            {
                this.idField = value;
            }
        }

        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string transform
        {
            get
            {
                return this.transformField;
            }
            set
            {
                this.transformField = value;
            }
        }

        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string @class
        {
            get
            {
                return this.classField;
            }
            set
            {
                this.classField = value;
            }
        }

        [System.Xml.Serialization.XmlTextAttribute()]
        public string Value
        {
            get
            {
                return this.valueField;
            }
            set
            {
                this.valueField = value;
            }
        }
    }

    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.w3.org/2000/svg")]
    public partial class svgGRect
    {

        private string idField;

        private decimal xField;

        private decimal yField;

        private string classField;

        private decimal widthField;

        private decimal heightField;

        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string id
        {
            get
            {
                return this.idField;
            }
            set
            {
                this.idField = value;
            }
        }

        [System.Xml.Serialization.XmlAttributeAttribute()]
        public decimal x
        {
            get
            {
                return this.xField;
            }
            set
            {
                this.xField = value;
            }
        }

        [System.Xml.Serialization.XmlAttributeAttribute()]
        public decimal y
        {
            get
            {
                return this.yField;
            }
            set
            {
                this.yField = value;
            }
        }

        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string @class
        {
            get
            {
                return this.classField;
            }
            set
            {
                this.classField = value;
            }
        }

        [System.Xml.Serialization.XmlAttributeAttribute()]
        public decimal width
        {
            get
            {
                return this.widthField;
            }
            set
            {
                this.widthField = value;
            }
        }

        [System.Xml.Serialization.XmlAttributeAttribute()]
        public decimal height
        {
            get
            {
                return this.heightField;
            }
            set
            {
                this.heightField = value;
            }
        }
    }


Ошибка появляется в строке objectList = serializer.Десериализация(поток);
Ошибка {"&ЛТ;описание СВГ='http://www.w3.org/2000/svg в'> был не ожидаются."}


Ниже приведены мои XML-данные

<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<svg version="1.1" id="_x30_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"

	 viewBox="0 0 1366 768" style="enable-background:new 0 0 1366 768;" xml:space="preserve">
<style type="text/css">
	.st0{fill:none;stroke:#000000;stroke-width:0.7087;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
	.st1{fill:#105689;}
	.st2{font-family:'ArialMT';}
	.st3{font-size:56.5499px;}
	.st4{fill:#4554A5;}
	.st5{font-size:56.5574px;}
	.st6{fill:#2776BB;}
</style>
<g id="LWPOLYLINE">
	<rect id="idrect3" x="251.4" y="-0.3" class="st0" width="866" height="300.2"/>
</g>
<g id="LWPOLYLINE_1_">
	<rect id="idrect2" x="248.6" y="366.5" class="st0" width="500.3" height="400.2"/>
</g>
<g id="LWPOLYLINE_2_">
	<rect id="idrect1" x="811.4" y="364.2" class="st0" width="300.2" height="404.1"/>
</g>
<g id="TEXT">
	<text id="idnano" transform="matrix(1 0 0 1 515.7997 166.1773)" class="st1 st2 st3">Nano Tech</text>
</g>
<g id="TEXT_1_">
	<text id="idmigalo" transform="matrix(1 0 0 1 420.2463 553.5321)" class="st4 st2 st5">Migalo</text>
</g>
<g id="TEXT_2_">
	<text id="idprime" transform="matrix(1 0 0 1 883.9615 567.5667)" class="st6 st2 st5">Prime</text>
</g>
</svg>


Что я уже пробовал:

Перепробовал много вещей, но я не понимаю, почему эта ошибка приходит. Может ли кто-нибудь, пожалуйста, помочь мне решить эту ошибку. Я застрял с этой ошибкой уже неделю и не могу ее решить.

Mehdi Gholam

Зачем конвертировать файл .svg в json или даже объекты c#?

Member 13041059

Я хочу вставить данные json в базу данных, и эти данные будут проходить через файл .svg только в моем проекте

F-ES Sitecore

Просто deserialise в XML-код в C# объекты, прямые, идет через JSON-это бессмысленно.

Maciej Los

Что-то не так с вашим xml. xsd.exe инструмент не может создать файл схемы для этого. Пожалуйста, попробуйте сами: Как использовать инструмент определения XML - схемы для создания классов и документов XML-схемы

1 Ответов

Рейтинг:
0

TommoDotCommo

Ваш XML-файл выглядит следующим образом:

<svg version="1.1" id="_x30_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1366 768" style="enable-background:new 0 0 1366 768;" xml:space="preserve">

<style type="text/css">

В вашем классе есть следующее:
public class Svg
...
public Style style { get; set; }
...
public class Style
...

У вас есть две разные версии "стиля" в вашем XML, но только одна версия в вашем C#.

Это правильно, он захватывает тег стиля:
public class Style

public Style style { get; set; }

Чтобы захватить атрибут, вы должны добавить его в класс Svg:
public string style { get; set; }


Надеюсь, это поможет!


Member 13041059

Когда я добавил public string style { get; set;}, он выдает ошибку в той же строке
var obj = JsonConvert.DeserializeObject<rootobject>(jsondata);

{"Неожиданный характер столкнулись, анализируя значение: {. Путь 'в формате SVG.стиль', линия 9, место 12."}

Ниже приведен мой класс SVG

открытый класс СВГ
{
public string version { get; set; }
public string id { get; set; }
общественного строка возвращает { получить; набор; }
общественного строка __поврежденных_имя__xmlnsxlink { получить; набор; }
публичная строка x { get; set; }
публичная строка y { get; set; }
public string viewBox { get; set; }
public Style style1 { get; set; }
public string style { get; set; }
общественного строка __поврежденных_имя__xmlspace { получить; набор; }
public List<string> significantwhitespace { get; set; }
публичный список<g> g { get; set; }
}

TommoDotCommo

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

Member 13041059

{/* Генератор: Adobe Illustrator 22.0.0, SVG Export PlugIn . Версия SVG: 6.00 Build 0) */"svg":{"version":"1.1","id":"x30","xmlns":"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink","x":"0px","y":"0px","viewBox":"0 0 1366 768"," style":"enablebackground:new 0 0 1366 768;","xml:space":"preserve","significantwhitespace":["
","
","
","
","
","
","
","
"],"стиль":{"тип":"текст/css","текст":"
.st0{fill:none;stroke:000000;strokewidth:0.7087;strokelinecap:round;strokelinejoin:round;strokemiterlimit:10;}
.st1{fill:105689;}
.st2{fontfamily:'ArialMT';}
.st3{размер шрифта:56.5499 px;}
.st4{заполнение:4554A5;}
.st5{размер шрифта:56.5574 px;}
.st6{заполнение:2776BB;}
"},"g":[{"id":"LWPOLYLINE","significantwhitespace":["
","
"],"rect":{"id":"idrect3","x":"251.4","y":"0.3","class":"st0","width":"866","height":"300.2"}},{"id":"LWPOLYLINE1","significantwhitespace":["
","
"],"rect":{"id":"idrect2","x":"248.6","y":"366.5","class":"st0","width":"500.3","height":"400.2"}},{"id":"LWPOLYLINE2","significantwhitespace":["
","
"],"rect":{"id":"idrect1","x":"811.4","y":"364.2","class":"st0","width":"300.2","height":"404.1"}},{"id":"TEXT","significantwhitespace":["
","
"],"текст":{"идентификатор":"idnano","преобразование":"матрица(1 0 0 1 515.7997 166.1773)","класс":"ст1 ст2 Ст3","текст":"нано тек"}},{"идентификатор":"ТЕКСТ1","significantwhitespace":["
","
"],"текст":{"идентификатор":"idmigalo","преобразование":"матрица(1 0 0 1 420.2463 553.5321)","класс":"перемычку ST4 ст2 ст5","текст":"Migalo"}},{"идентификатор":"ТЕКСТ2","significantwhitespace":["
","
"],"текст":{"идентификатор":"idprime","преобразование":"матрица(1 0 0 1 883.9615 567.5667)","класс":"СТ6 ст2 ст5","текст":"премьер -"}}]}}

Выше приведены данные Json в переменной jsondata

TommoDotCommo

То, что у вас есть, - это недопустимый JSON. Стиль дублируется на том же уровне, что недопустимо, и вы никогда не сможете заставить JsonConvert десериализовать его в объект C#. Теперь вам нужно переосмыслить, почему вы вообще используете JSON.