Как я десериализовываю пространства имен XML в C# (Система. Xml. Сериализация)?

Я - крупный поклонник LINQ - хотя это нужно сохранить в перспективе и не рассматривать как серебряную пулю.

Профессионалы:

  • Декларативный подход делает запросы легче понять и более компактный
  • , Расширяемость и деревья выражений позволяют главным образом последовательные запросы многочисленных источников
  • , Даже незавершенные запросы могут быть реализованы способами кроме LINQ к Объектам - например, Параллельного LINQ и моего собственного Нажатия платформа LINQ. Очень гибкий.
  • Неправдоподобно полезный для незавершенных запросов, где является самым легким понять
  • Большой быть в состоянии избежать SQL в строках и т.д.
  • , Широкий спектр операторов, обеспеченных по умолчанию, и другие, может легко быть добавлен для LINQ к Объектам
  • , функции Language, представленные, прежде всего, для LINQ, широко применимы в другом месте (yay для лямбд)

Недостатки:

  • выражения Запроса не поняты достаточно хорошо и злоупотребляются. Часто вызов простого метода короче и более прост.
  • Неизбежные несоответствия между поставщиком - несоответствие импеданса все еще присутствует, который разумен, но должен быть понят
  • всегда будут некоторые вещи, которые можно сделать в SQL, но не в LINQ
  • , не понимая то, что продолжается, легко записать очень неэффективный код
  • , трудно записать поставщику LINQ. Это может быть неизбежно, но больше руководства от Microsoft ценилось бы.
  • Это - новый образ мыслей о доступе к данным для большинства разработчиков и будет требоваться время для понимания для проникновения
  • Не конкретно LINQ, но связанный с ним - способ, которым методы расширения обнаружены в C#, не достаточно детализирован
  • , операторы Some "отсутствуют", особенно эквиваленты OrderBy для вещей кроме упорядочивания - например, нахождение объекта с максимальным значением свойства
  • , Задержанное выполнение и потоковая передача плохо поняты (но улучшающийся)
  • , Отладка может быть очень хитрой из-за задержанного выполнения и потоковой передачи
  • В некоторых конкретных случаях, LINQ может быть значительно медленнее, чем ручной код. Чем лучше Вы понимаете внутренние работы, тем лучше Вы будете в состоянии предсказать это. (И конечно, если производительность важна для Вас, у Вас должны быть соответствующие тесты вокруг этого.)

я нахожу, что это является лучшим при контакте с незавершенными запросами. Их легко предсказать, понять и расшириться. Дополнительные технологии как LINQ к XML и Параллельный LINQ являются большими. LINQ к Объектам может использоваться почти где угодно.

LINQ к SQL и т.д. действительно хороши, где они являются соответствующими, но их более трудно понять и нуждаются в большем количестве экспертных знаний. Они также только применимы в определенных областях Вашего кода.

5
задан Ryall 9 October 2009 в 16:43
поделиться

2 ответа

Here's a quick sample for you...

[XmlRoot("myObject")]
public class MyObject
{
    [XmlElement("myProp", Namespace = "http://www.whited.us")]
    public string MyProp { get; set; }

    [XmlAttribute("myOther", Namespace = "http://www.whited.us")]
    public string MyOther { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        var xnames = new XmlSerializerNamespaces();
        xnames.Add("w", "http://www.whited.us");
        var xser = new XmlSerializer(typeof(MyObject));
        using (var ms = new MemoryStream())
        {
            var myObj = new MyObject()
            {
                MyProp = "Hello",
                MyOther = "World"
            };
            xser.Serialize(ms, myObj, xnames);
            var res = Encoding.ASCII.GetString(ms.ToArray());
            /*
                <?xml version="1.0"?>
                <myObject xmlns:w="http://www.whited.us" w:myOther="World">
                  <w:myProp>Hello</w:myProp>
                </myObject>
             */
        }
    }
}
8
ответ дан 14 December 2019 в 01:11
поделиться
[XmlElement("someElement", Namespace="namespace")]
public string SomeElement;

Addendum: Make sure "namespace" is the full URI of the namespace, not just the prefix.

1
ответ дан 14 December 2019 в 01:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: