我一直在寻找这个问题很长一段时间,似乎无处可去。我需要找到一种方法来完成以下两个任务,基于.Net Entity对象:
Entity Universe中是否有任何可以帮助您以简单方式执行此操作的内容?
THX。
答案 0 :(得分:2)
我认为XML序列化和模式推断的组合可能就是您所需要的。
XmlSerializer应该足以生成您正在寻找的XML文件。除了传入流或流编写器以及根级实体的实例之外,您确实不需要执行任何操作。 XML序列化的实际代码是2行:
// for example:
public static void Serialize<T> (T data, TextWriter writer)
{
var xs = new XmlSerializer(typeof(T))
xs.Serialize(writer, data); // write out the xml to the stream writer...
}
我不确定你为什么要避免XML序列化。
为了相对于实体集保存XSD,您可以从生成的XML中推断出架构。通过将XmlSchemaInference
类与XmlSchemaSet
结合使用来完成架构推理。
我经常为自己创建一个小的模式推理实用程序,无论我走到哪里,它看起来像这样:
class Program
{
static void Main(string[] args)
{
if (args.Length == 0)
{
Console.WriteLine("Nothing to do.");
return;
}
// first arg should contain the path to xml else error
Console.WriteLine("Inferring schema of: {0}", args[0]);
// default output should be xml name part + .xsd
InferSchema(args[0]);
}
static void InferSchema(string fileName)
{
XmlWriter writer = null;
XmlSchemaInference infer = new XmlSchemaInference();
XmlSchemaSet sc = new XmlSchemaSet();
string outputXsd = fileName.Replace(".xml", ".xsd");
sc = infer.InferSchema(new XmlTextReader(fileName));
using (writer =
XmlWriter.Create(new StreamWriter(outputXsd)))
{
foreach(XmlSchema schema in sc.Schemas())
{
schema.Write(writer);
Console.WriteLine(">> found schema - generated to {0}",
outputXsd);
}
}
}
}
它没有比这简单。