使用.NET 3.5创建类似于System.ServiceModel.Syndication的东西

时间:2010-02-23 21:52:49

标签: c# xml .net-3.5

如果我正在处理几种标准 xml格式,那么将它们封装在C#3.5中的最佳做法是什么?我想最终得到与System.ServiceModel.Syndication命名空间类似的东西。

封装ADF 1.0 XML standard的类就是一个例子。它有主要的XML根节点,6个子元素,其中4个是必需的IIRC,几个必需的和可选的元素和属性在树下面。我希望这个类至少可以创建所有必需部分的XML,直到完整的XML表示。 (有道理)。

使用LINQ 4 XML和扩展类等等,必须有一些关于快速生成类结构以供使用的想法。是?没有? :)

我不确定我是否提供了足够的细节来获得正确的答案,但我现在愿意接受想法。

TIA

2 个答案:

答案 0 :(得分:0)

XML序列化似乎是一种很好的方法。您甚至可以使用xsd.exe自动生成类...


修改

请注意,该工具生成的类名通常不是很方便,因此您可能希望重命名它们。您可能还想将T的数组更改为List<T>,以便您可以根据需要轻松添加项目。

假设根元素的类名为ADF,您可以按如下方式加载ADF文档:

ADF adf = null;
XmlSerializer xs = new XmlSerializer(typeof(ADF));
using (XmlReader reader = XmlReader.Create(fileName))
{
    adf = (ADF)xs.Deserialize(reader);
}

并保存它:

ADF adf = ...; // create or modify your document
...
XmlSerializer xs = new XmlSerializer(typeof(ADF));
using (XmlWriter writer = XmlWriter.Create(fileName))
{
    xs.Serialize(writer, adf);
}

答案 1 :(得分:-2)

为什么不按照Syndication命名空间中的SyndicationFeed对象的模式进行操作?创建一个类,该类将Uri接收到xml文档或仅接收文档片段。

然后根据您的标准解析文档(如果您愿意,可以使用LinqToXml进行解析,但如果您对它们感到满意,则regEx可能会更快)。当文档未通过规范规则时,适当地抛出异常或跟踪错误。

如果文档通过了解析步骤,则将文档的各个部分分解为对象的公共getter属性。然后将完全水合的物体返回给消费者使用

似乎很直接给我。这就是你想要的东西,还是你在寻找更多的东西?