2017-02-08 10 views
1

У меня есть класс, как упоминанием ниже:Как удалить промежуточный класс после сериализации в XML и предоставить определенный структурированный XML в C#?

public class Employee 
    { 

     public Address x; 


     public Contact y; 
    } 

    public class Address 
    { 
     public string Address1; 
     public string Address2; 
    } 

    public class Contact 
    { 
     public string EmailID; 
     public string PhoneNumber; 
    } 

Выход: мне нужно ниже структуры XML после того, как сериализовать его с помощью C#.

<Employee> 
    <Address1> 
    India 
    </Address1> 

    <Address2> 
GUjarat 
    </Address2> 

    <EmailID> 
[email protected] 
    </EmailID> 

    <PhoneNumber> 
046094609 
    </PhoneNumber> 

</Employee> 

Я хочу что-то изменить в классе, например, задать свойство XML для свойства класса.

+0

Был ли ответ Марка полезным для вас, Ронак? Пожалуйста, попробуйте подтвердить помощь, которую вы получаете, так же, как вы, когда люди помогут вам за пределами Интернета. – halfer

ответ

1

Вы не можете получить этот xml из этих классов, используя XmlSerializer. Вам нужно будет сгладить ваши данные (возможно, только для сериализации) на то, что имеет адреса и контактные адреса электронной почты в качестве членов одного типа. Например:

[XmlRoot("Employee")] 
public class EmployeeDTO { 
    public string Address1 {get;set;} 
    public string Address2 {get;set;} 
    public string EmailID {get;set;} 
    public string PhoneNumber {get;set;} 
} 

Другой вариант сделать это вручную с помощью манипуляции DOM (XDocument/XmlDocument) или писатель API (XmlWriter).


Edit: на самом деле вы можете своего рода это сделать, но это ужасно:

public class Employee 
{ 

    [XmlIgnore] 
    public Address x; 

    [XmlIgnore] 
    public Contact y; 

    public string Address1 { 
     get { return x == null ? null : x.Address1; } 
     set { (x ?? (x = new Address()).Address1 = value; } 
    } 
    // note null handling in the above 
    // TODO: the others 
} 

Пожалуйста, не делайте этого.