Хотите сериализовать / десериализовать объект в / из XML - хорошо ли указывать теги как строковые константы? - PullRequest
1 голос
/ 03 июня 2009

У меня есть класс, который я хочу иметь возможности сериализации / десериализации.
Он реализует интерфейс IXMLConvertable:

public interface IXMLConvertable<T>
where T: new() {
    T deserialize(XElement element);
    void serialize(XElement element);
}

когда T является типом объекта для десериализации. Вопрос в том, является ли хорошей практикой указывать имена тегов XML не в коде, а в строковых константах, например:

public class XMLTagger {
    Dictionary<String, String> xmltags;  /*key is fieldname to serialize, value is the tag for it*/
    //... 
    public void addNewTag(String field, String tagForIt) {
        xmltags.Add(field, tagForIt);
    }
    //...
}

Я надеюсь, вы поняли идею. Этот класс может использоваться каждым моим классом, какие объекты я хочу сериализовать / десериализовать, и предоставляет простой способ получить нужный тег по имени поля. Это хорошая идея или нет?

1 Ответ

3 голосов
/ 03 июня 2009

Могу я спросить, почему вы вводите дополнительный интерфейс? IXmlSerializable кажется довольно похожим (хотя и ориентированным XmlWriter / XmlReader). Я также не уверен, почему deserialize будет возвращать что-то; мы не должны десериализовать в текущий объект? (иначе это IXmlConverter<T>, если вы понимаете, о чем я).

Ре теги ... вопрос неясен; вы не показываете имена тегов ни в кодовых, ни в строковых константах ...

Но это лот проще просто использовать XmlSerializer и позволить ему беспокоиться обо всем ...

[XmlType("foo")]
public class Foo {
    [XmlAttribute("bar")]
    public string Bar {get;set;}
    [XmlElement("baz")]
    public int Baz {get;set;}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...