Проблемы с использованием String.Replace для изменения вывода XML-сериализатора - PullRequest
0 голосов
/ 21 марта 2011

Я генерирую XML-файл.Я заметил, что в файле есть тег, который я не хочу.Я генерирую файл xml из объекта xmlSerializer и неправильно обрабатывает свойство для моего объекта ... Свойство этого объекта выглядит примерно так ...

public List<ProductVarient> Varients { get; set; }

Поэтому, когда я сериализую егоЯ получаю такую ​​структуру

<Varients>
  <ProductVarient>
     <Name>Nick</Name>
     ......

Я хочу просто

  <AnotherProp>
     <Stuff>toys</Stuff>
  </AnotherProp>
  <ProductVarient>
     <Name>Nick</Name>
  </ProductVarient>
  <ProductVarient>
     <Name>Jeff</Name>
  </ProductVarient>
....

Так что вместо попытки обойти xmlserializer, я пошел с супер-хаком и написал этот код

 string s = File.ReadAllText(path);
    s.Replace("<Varients>", "");
    s.Replace("</Varients>", "");

    using (FileStream stream = new FileStream(path, FileMode.Create))
    using (TextWriter writer = new StreamWriter(stream))
    {
        writer.WriteLine("");
        writer.WriteLine(s);
    }

2 Вопросы

-Код, который я написал, не заменит "", он не выдает исключение, но он также не работает, я не уверен, почему?-Есть быстрый способ решить мою проблему.

Ответы [ 3 ]

6 голосов
/ 21 марта 2011

Try:

s = s.Replace("<Varients>", "");
s = s.Replace("</Varients>", ""); 

String является неизменяемым, и такие методы, как Replace возвращают свой результат вместо изменения в получателе.

ОБНОВЛЕНИЕ: Но, как сказал Джон Сондерс , лучшее решение - использовать XmlSerializer для достижения того, что вы хотите:

[XmlElement("ProductVarient")]
public List<ProductVarient> Varients { get; set; }
2 голосов
/ 21 марта 2011

Вместо того, чтобы пытаться «обойти» XmlSerializer, вы должны научиться правильно его использовать.

Попробуйте разместить [XmlElement] в своем свойстве:

[XmlElement]
public List<ProductVarient> Varients { get; set; }

В качестве альтернативы вы можетепопробуйте атрибуты [XmlArray] и [XmlArrayItem].Вы не показали хороший пример желаемого XML (что вы хотите, если в списке несколько элементов?), Поэтому я не могу сказать вам, какой из них следует использовать.

0 голосов
/ 21 марта 2011

Плохой взлом и должен быть отправлен в свою комнату, но для ответа на ваш вопрос:

 string s = File.ReadAllText(path);
    s = s.Replace("<Varients>", "");
    s = s.Replace("</Varients>", "");

    using (FileStream stream = new FileStream(path, FileMode.Create))
    using (TextWriter writer = new StreamWriter(stream))
    {
        writer.WriteLine("");
        writer.WriteLine(s);
    }

Replace возвращает измененную строку, просто использование расширения ничего не делает, если не возвращается результат.

...