2013-02-21 6 views
2

Я пытаюсь создать класс, который получает небольшой xml-файл из каталога и превращает его в объект, у меня всегда возникают проблемы с атрибутами. Я хотел бы, чтобы класс имел список измерений, чтобы его можно было называть. Размер [x] .id, Dimension [x] .name .... и т. Д. Класс будет упоминаться много раз, но я хотел бы, чтобы он только заполнил xml для объекта в первый раз.Преобразование XML в объект C#

Вот XML, и спасибо в Advanced:

<?xml version="1.0"?> 
    <dimensions> 
     <dimensions id="0" name="Test" serverAddress = "cm.dt.funcom.com" port = "7509" /> 
     <dimensions id="1" name="Atlantean" serverAddress = "cm.d1.funcom.com" port = "7501" /> 
     <dimensions id="2" name="Rimor" serverAddress = "cm.d2.funcom.com" port = "7502" /> 
    </dimensions> 
+1

Что вы пробовали? Где ты посмотрел? Что происходит, когда вы вводите «Преобразование XML в объект C#» в поле поиска StackOverflow? –

+0

как я упоминал выше, у меня проблемы с атрибутами. Я могу deseriize это легко, если это не было для атрибутов. В последнее время я слишком привык к json –

+0

См. Это сообщение относительно «Как правильно реализовать IXmlSerializable» http://stackoverflow.com/questions/5590592/help-with-implementing-ixmlserializable-on-this-xml –

ответ

2

Я хотел бы попробовать что-то, что должно отнять тревогу атрибута.

Создайте (или используйте существующий) XSD, который будет работать для ваших XML. Что-то такое, как это:

<?xml version="1.0" encoding="utf-8"?> 
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)--> 
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="dimensions"> 
    <xsd:complexType> 
     <xsd:sequence> 
     <xsd:element maxOccurs="unbounded" name="dimensions"> 
      <xsd:complexType> 
      <xsd:attribute name="id" type="xsd:unsignedByte" use="required" /> 
      <xsd:attribute name="name" type="xsd:string" use="required" /> 
      <xsd:attribute name="serverAddress" type="xsd:string" use="required" /> 
      <xsd:attribute name="port" type="xsd:unsignedShort" use="required" /> 
      </xsd:complexType> 
     </xsd:element> 
     </xsd:sequence> 
    </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 

Используя инструмент xsd.exe доступный с .NET (команда студии приглашение Визуальная будет установить путь хорошо для вас) генерировать классы (подразумевается, что выше XSD сохраняется как converting-xml-into-a-c-sharp-object.xsd):

xsd /c <fullpath-if-not-in-the-current-folder>converting-xml-into-a-c-sharp-object.xsd 

сгенерированный код будет что-то подобное (только заголовок):

//------------------------------------------------------------------------------ 
// <auto-generated> 
//  This code was generated by a tool. 
//  Runtime Version:4.0.30319.17929 
// 
//  Changes to this file may cause incorrect behavior and will be lost if 
//  the code is regenerated. 
// </auto-generated> 
//------------------------------------------------------------------------------ 

using System.Xml.Serialization; 

// 
// This source code was auto-generated by xsd, Version=4.0.30319.1. 
// 


/// <remarks/> 
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] 
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)] 
public partial class dimensions { 

    private dimensionsDimensions[] dimensions1Field; 

    /// <remarks/> 
    [System.Xml.Serialization.XmlElementAttribute("dimensions")] 
    public dimensionsDimensions[] dimensions1 { 
     get { 
      return this.dimensions1Field; 
     } 
     set { 
      this.dimensions1Field = value; 
     } 
    } 
} 

Следующим шагом является написание кода, который ссылается на этот сгенерированный класс; есть много ссылок, которые вы могли бы найти; введение может быть одним из таких, как this on SO.

Вышеупомянутый стиль авторского стиля XSD («Русская кукла») дает имена классам, которые могут не выглядеть умными; here - это возможный путь вокруг него.

+0

Спасибо :) Это был комплект помощи! –