2016-12-08 3 views
0

Я написал метод сериализации списка (содержащий объекты класса) в строку xml, но с таким количеством гнезд я не могу понять, как отформатировать мой код чтобы сделать его наиболее читаемым. Вот пример XML:Как отформатировать код XDocument, чтобы сделать его наиболее читаемым

<Text> 
    <Info name="example" language="en-US">example</Info> 
    <Info name="example" language="en-GB">example</Info> 
</Text> 

И вот (скорее всего) ужасно отформатированный код:

XDocument xdoc = new XDocument 
    (
    new XElement 
     ("Text", 
      Infos.Select(item => 
       new XElement 
       ("Info", 
        new XAttribute("name", item.Name), 
        new XAttribute("language", item.Language), 
       item.Value) 
      ) 
     ) 
    ); 
return xdoc.ToString(); 

Это довольно короткий пример, но может расти и в будущем, и как таковой, я d хотел бы сделать мой код наиболее читаемым - как мне это сделать?

+0

Этот вопрос, возможно, принадлежит больше http://codereview.stackexchange.com/ –

+0

Я предполагаю, что это что-то модератор будет на месте, чтобы решить, так как я не могу удалить и переместить этот вопрос, поскольку он уже имеет один ответ. Тем не менее, если мода решает удалить этот вопрос, это его право на это. – user6807975

+1

Вы должны отформатировать его так, как если бы вы отформатировали типичный XML-документ. Тег открытия и закрытия будет на одном уровне отступов, его содержимое (атрибуты, значения и другие элементы) будет находиться на следующем уровне. Здесь это означает, что вызов конструктора с именем на одном уровне, другие параметры (содержимое) на следующем уровне, а затем закрывающая скобка на том же уровне, что и конструктор (или если он достаточно короткий, в конце последнего элемента) , Ваш подход - огромный отход от того, что предлагает [MSDN] (https://msdn.microsoft.com/en-us/library/mt693049.aspx). –

ответ

1

Мне нравится этот формат

//Option 1 
XDocument xdoc1 = new XDocument(); 
xdoc1.Add(new XElement("Text", 
    Infos.Select(item => new XElement("Info", 
     new XAttribute("name", item.Name), 
     new XAttribute("language", item.Language), 
     item.Value 
     ) 
    ) 
)); 

//Option 2 
XDocument xdoc2 = new XDocument(); 
xdoc2.Add(new XElement("Text", new object[] { 
    Infos.Select(item => new XElement("Info", new object[] { 
     new XAttribute("name", item.Name), 
     new XAttribute("language", item.Language), 
     item.Value 
    })) 
})); 
+0

Основная проблема, которую я вижу здесь, заключается в том, что 'XElement' не выравнивается с его конечными скобками. В случае, если xml расширится в будущем с новыми элементами, будет ли этот код еще доступным для чтения? – user6807975

+0

Я обновил код, чтобы добавить немного другой вариант. Использование нового объекта [] {добавляет фигурные скобки, которые иногда помогают сделать код более читаемым. – jdweng

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