2015-03-10 2 views
0

У меня есть этот XMLDeserialize как строка

<Report Name="Report"> 
    <Input> 
    <Content> 
     <XmlInput>Any xml inside the input tag should be deserialised as string</XmlInput> 
     <XmlInput>Any xml inside the input tag should be deserialised as string</XmlInput> 
    </Content> 
    <!--<XmlInput>Any xml inside the input tag should be deserialised as string</XmlInput>--> 
    </Input> 
</Report> 

и этот класс

[XmlRoot("Report")] 
public class Report 
{ 
    [XmlAttribute] 
    public string Name { get; set; } 

    public Input Input { get; set; } 
} 

public class Input 
{ 
    [XmlElement] 
    public string Content { get; set; } 
} 

Я использую следующий код для десериализации XML-

 string path = @"C:\temp\myxml.xml"; 
     var xmlSerializer = new XmlSerializer(typeof(Report)); 
     using (var reader = new StreamReader(path)) 
     { 
      var report = (Report)xmlSerializer.Deserialize(reader); 
     } 

Проблема здесь , Я хочу, чтобы содержимое xml внутри элемента контента десериализовалось как строка. Это возможно?

<Content> 
    <XmlInput>Any xml inside the input tag should be deserialised as string</XmlInput> 
    <XmlInput>Any xml inside the input tag should be deserialised as string</XmlInput> 
</Content> 
+0

Итак, вы хотите, чтобы два значения в двух элементах 'XmlInput' были объединены и помещены в строке «Input.Content»? Или вы хотите, чтобы строка была внутренним xml элемента 'Content'? В любом случае вам, вероятно, придется выполнять пользовательскую сериализацию и десериализацию. – juharr

+0

Вы хотите выделить ' Любой xml внутри тега ввода следует десериализовать как строку Любой xml внутри тега ввода следует десериализовать как строку' в качестве результата в вашем примере? –

+0

@EsotericScreenName да. поэтому строка будет содержать xml – user1131926

ответ

0

Сомнения есть способ с десериализацией ... С Linq для XML это будет выглядеть следующим образом:

class Program 
{ 
    static void Main(string[] args) 
    { 
     XDocument doc = XDocument.Load("XMLFile1.xml"); 

     IEnumerable<XElement> reportElements = doc.Descendants("Report"); 

     IEnumerable<Report> reports = reportElements 
      .Select(e => new Report 
      { 
       Name = e.Attribute("Name").Value, 
       Input = new Input 
       { 
        Content = e.Element("Input").Element("Content").ToString() 
       } 
      }); 
    } 
} 

Редактировать

Если вы хотите лишить тег контента также:

class Program 
{ 
    static void Main(string[] args) 
    { 
     XDocument doc = XDocument.Load("XMLFile1.xml"); 

     IEnumerable<XElement> reportElements = doc.Descendants("Report"); 

     IEnumerable<Report> reports = reportElements 
      .Select(e => new Report 
      { 
       Name = e.Attribute("Name").Value, 
       Input = new Input 
       { 
        Content = string.Join("\n", e.Element("Input").Element("Content").Elements().Select(c => c.ToString())) 
       } 
      }); 
    } 
} 
+0

Привет Флориан, не понимал, что мы можем использовать linq для xml. На самом деле я могу работать с примером, который вы предоставили. спасибо большое – user1131926

+0

Не нужно говорить спасибо, но вы радушны =) –

Смежные вопросы