C# 是否可以在运行时使用XmlSerializer提取未知的命名空间声明?

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

有没有一种方法可以使用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.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名称空间。这就是你想要的吗?我想是的。我没看到。现在看看。