2015-09-08 3 views
1

мне нужно сгенерировать XML-документ, который следует за этим specifictaionСоздание XML документ с C#

<productName locale="en_GB">Name</productName> 

, но с использованием XMLSeralization я получаю следующее

<productName locale="en_GB"> 
<Name>Name</Name> 
</productName> 

Мой C# код, как это:

[Serializable] 
public class productName 
{ 
    public productName() 
    { 

    } 

    public string Name; 
    [XmlAttribute] 
    public string locale; 
} 

XmlAttribute - это то, что требуется для отображения языкового стандарта в нужном месте, но я не могу установить Указать, как правильно экспортировать поле Name.

У кого-нибудь есть идеи?

Благодаря

EDIT:

Это код для генерации XML-

public static class XMLSerialize 
{ 
    public static void SerializeToXml<T>(string file, T value) 
    { 
     var serializer = new XmlSerializer(typeof(T)); 
     using (var writer = XmlWriter.Create(file)) 
      serializer.Serialize(writer, value); 
    } 

    public static T DeserializeFromXML<T>(string file) 
    { 
     XmlSerializer deserializer = new XmlSerializer(typeof(T)); 
     TextReader textReader = new StreamReader(file); 
     T result; 
     result = (T)deserializer.Deserialize(textReader); 
     textReader.Close(); 

     return result; 
    } 
} 
+0

какой метод вы используете для генерации XML из класса? – Liam

+0

Добавлен код сериализации xml на вопрос –

+1

- это * productName * корневой элемент вашего XML? –

ответ

5

Вместо указание Имени в качестве элемента указать его в качестве текстового значения пути добавления [XmlText ] атрибут

[XmlText] 
public string Value { get; set; } 
+0

Спасибо :) Я принимаю ответ в ближайшее время –

2

Это не только прямой ответ на ваш вопрос, но и косвенный ответ о том, как решить подобные проблемы в будущем.

Начало наоборот, с вашей XML, написать XML так же, как вы хотите, и идти оттуда, как это:

// assuming data.xml contains the xml as you'd like it 
> xsd.exe data.xml    // will generate data.xsd, ie xsd-descriptor 
> xsd.exe data.xsd /classes // will generate data.cs, ie c# classes 
> notepad.exe data.cs   // have a look at data.cs with your favorite editor 

Теперь просто посмотреть на data.cs, ​​это будет содержать огромное количество атрибутов и вещей и пространства имен, вероятно, ошибочны, но по крайней мере вы знаете, как решить вашу конкретную проблему xml.

Прямой ответ заключается в использовании XmlTextAttribute по данному свойству, предпочтительно названному Value, поскольку это соглашение, которое я видел до сих пор.

[Serializable] 
public class productName { 
public productName() { } 

[XmlText] 
public string Value {get; set;} 

[XmlAttribute] 
public string locale {get; set;} 
}