2017-01-05 13 views
-1

複雑なオブジェクトを1つのルートノードだけでXMLデータに変換したいと考えています。複雑なオブジェクトを.NETのXmlに変換する必要があります。#

public class Customer 
{ 
    public Address Address { get; set; } 
    public User user { get; set; } 
} 

public class Address 
{ 
    public string city { get; set; } 
    public string State { get; set; } 
} 

public class User 
{ 
    public string Name { get; set; } 
    public string Id { get; set; } 
    public Dictionary<String, String> response { get; set; } 
} 

私はAddressUserプロパティが含まれている顧客のクラスを持っています。私はCustomerオブジェクトを1つのルートノードを持つXMLデータに変換したいと考えています。

私はあなたがC#で基本的なXMLシリアル化でそれを行うことはできませんが、あなたの目標を達成するためにDTOクラスを作成することができます

XML形式以下
<row> 
    <cell cellType="city">Chennai</cell> 
    <cell cellType="state">tamilnadu</cell> 
    <cell cellType="name">test</cell> 
    <cell cellType="id">001</cell> 
    <cell cellType="response1">response1</cell> 
    <cell cellType="response2">response2</cell> 
</row> 
+0

あなたは価値の名前の属性を使用する理由によって関連していませんか?どうしてですか?チェンナイ tamilnadu ...など? – Fabio

+1

[XMLへのオブジェクトのシリアル化]の複製があります(http://stackoverflow.com/questions/4123590/serialize-an-object-to-xml) –

答えて

0

てみたXML LINQ:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 

namespace ConsoleApplication34 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Customer customer = new Customer() 
      { 
       Address = new Address() 
       { 
        city = "Chennai", 
        State = "tamilnadu", 
       }, 
       user = new User() 
       { 
        Name = "test", 
        Id = "001", 
        response = new Dictionary<string, string>() { 
         { "response1", "response1"}, 
         { "response2", "response2"} 
        } 
       } 
      }; 

      XElement row = new XElement("row", new object[] { 
       new XElement("cell", new object[] { 
        new XAttribute("cellType", "city"), 
        customer.Address.city 
       }), 
       new XElement("cell", new object[] { 
         new XAttribute("cellType", "state"), 
         customer.Address.State 
        }), 
       new XElement("cell", new object[] { 
         new XAttribute("cellType", "name"), 
         customer.user.Name 
        }), 
       new XElement("cell", new object[] { 
         new XAttribute("cellType", "id"), 
         customer.user.Id 
        }), 
        customer.user.response.AsEnumerable().Select(x => new XElement("cell", new object[] { 
         new XAttribute("cellType",x.Key), 
         x.Value 
        })) 
      }); 

     } 

     //<row> 
     // <cell cellType="city">Chennai</cell> 
     // <cell cellType="state">tamilnadu</cell> 
     // <cell cellType="name">test</cell> 
     // <cell cellType="id">001</cell> 
     // <cell cellType="response1">response1</cell> 
     // <cell cellType="response2">response2</cell> 
     //</row> 
    } 
    public class Customer 
    { 
     public Address Address { get; set; } 
     public User user { get; set; } 
    } 

    public class Address 
    { 
     public string city { get; set; } 
     public string State { get; set; } 
    } 

    public class User 
    { 
     public string Name { get; set; } 
     public string Id { get; set; } 
     public Dictionary<String, String> response { get; set; } 
    } 

} 
0

にオブジェクトをしたいです。このようにDTOを使用して、それにあなたのエンティティをマップ:

[XmlRoot("row")] 
public class RowDto 
{ 
    [XmlElement("cell")] 
    public List<Cell> Cells { get; set; } 
} 

public class Cell 
{ 
    [XmlAttribute("cellType")] 
    public string Type { get; set; } 

    [XmlText] 
    public string Value { get; set; } 
} 
+0

myオブジェクトにも辞書が含まれています。どのように1つのルートノードでxmlに変換することができます – Arun

+0

それはあなたの応答の辞書のキーが何であるかによって異なります –

関連する問題