C# 是否可以在运行时使用XmlSerializer提取未知的命名空间声明?
有没有一种方法可以使用IXmlSerializable或更好的方法,通过自定义属性重新编写此代码C# 是否可以在运行时使用XmlSerializer提取未知的命名空间声明?,c#,xmlserializer,ixmlserializable,C#,Xmlserializer,Ixmlserializable,有没有一种方法可以使用IXmlSerializable或更好的方法,通过自定义属性重新编写此代码 // TODO: how to harvest the namespaces from the request using a model and XmlSerializer? var xmlStr = await Helper.Post (uri, request); var xml = XDocument.Parse (xmlStr); var node = (XElement) xml.Fi
// TODO: how to harvest the namespaces from the request using a model and XmlSerializer?
var xmlStr = await Helper.Post (uri, request);
var xml = XDocument.Parse (xmlStr);
var node = (XElement) xml.FirstNode;
var ns = Namespaces = new XmlSerializerNamespaces ();
if (node.HasAttributes)
{
foreach (var attr in node.Attributes ())
{
if (attr.IsNamespaceDeclaration)
{
ns.Add (attr.Name.LocalName, attr.Value);
}
}
}
我之所以这样做是因为我想将xml反序列化到一个模型中,我希望该模型包含响应中的所有名称空间声明,但我不知道它们是什么。这是一个OGC GetCaps响应,OGC使用名称空间来标识服务,这些服务在设计时是未知的
在更完整的上下文中,以下是相同的代码:
public async Task<Loader> Initialize (Uri uri)
{
var request = new GetCapabilities.GetCapabilitiesRequest ();
// TODO: use another form of caching (or allow support for expiration)
var response = Helper.CachedGetter.Post<GetCapabilities.GetCapabilitiesResponse> (uri, request);
await response;
GetCaps = response.Result;
// TODO: need to harvest the namespaces from the request but the model can't do it.
{
var xmlStr = await Helper.Post (uri, request);
var xml = XDocument.Parse (xmlStr);
var node = (XElement) xml.FirstNode;
var ns = Namespaces = new XmlSerializerNamespaces ();
if (node.HasAttributes)
{
foreach (var attr in node.Attributes ())
{
if (attr.IsNamespaceDeclaration)
{
ns.Add (attr.Name.LocalName, attr.Value);
}
}
}
}
return this;
}
公共异步任务初始化(Uri)
{
var request=new GetCapabilities.GetCapabilitiesRequest();
//TODO:使用另一种形式的缓存(或允许支持过期)
var response=Helper.CachedGetter.Post(uri,请求);
等待回应;
GetCaps=response.Result;
//TODO:需要从请求中获取名称空间,但模型无法这样做。
{
var xmlStr=await Helper.Post(uri,请求);
var xml=XDocument.Parse(xmlStr);
var node=(XElement)xml.FirstNode;
var ns=Namespaces=new-XmlSerializerNamespaces();
if(node.HasAttributes)
{
foreach(node.Attributes()中的var attr)
{
if(attr.IsNamespaceDeclaration)
{
添加(attr.Name.LocalName,attr.Value);
}
}
}
}
归还这个;
}
在反序列化过程中,可以使用捕获给定节点的xml名称空间。这就是你想要的吗?我想是的。我没看到。现在看看。