c# - 如果对象元素根标记不存在,如何将 XML 反序列化为对象?

标签 c# xml serialization

我正在使用一个返回 <body> 中所有内容的 API XML 标记。

我正在使用以下函数将 XML 反序列化为对象:

    public TObject ParseXML<TObject>(string xml)
    {
        using (TextReader reader = new StreamReader(GetMemoryStream(xml)))
        {
            XmlSerializer serialiser = new XmlSerializer(typeof(TObject));
            return (TObject)serialiser.Deserialize(reader);
        }
    }

如果对象没有根标记,我如何将我的 XML 反序列化为该对象?

例如,我收到以下响应:

<body>
    <active>true</active>
    <allow_quote_requests>false</allow_quote_requests>
    <currency_iso_code>AUD</currency_iso_code>

body 标签之后的所有内容实际上都是 Offer对象,但是因为该标记不存在,所以我不确定如何将其反序列化为该对象。如果我将这些属性添加到 Body 中,它就会起作用模型。

最佳答案

    /// <summary>
    /// Deserialize an object from the given reader which has been positioned at the start of the appropriate element.
    /// </summary>
    /// <typeparam name="T">the type of the object to deserialize</typeparam>
    /// <param name="reader">the reader from which to deserialize the object</param>
    /// <returns>an object instance of type 'T'</returns>
    public static T DeserializeFromXml<T>(XmlReader reader)
    {
        T value = (T)new XmlSerializer(typeof(T), new XmlRootAttribute(reader.Name) { Namespace = reader.NamespaceURI }).Deserialize(reader);
        return value;
    }

关于c# - 如果对象元素根标记不存在,如何将 XML 反序列化为对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44319304/

相关文章:

c# - 如何正确地将多个 cv::Mat 从 c++ dll 传递到 opencvsharp Mat c#?

c# - 自宿主 WCF ServiceHost 对象生存期

java - cvc-elt.1 : Cannot find the declaration of element for RootElement

WCF序列化代码

c# - 在 C# 中,为什么将 key 固定在内存中更安全?

c# - 如何在 UWP 中使用 ListView 捕获点击?

PHP:对象数组 - 序列化与 json_encode - 替代方案?

java - 如果两个对象引用指向同一个可序列化对象,在 java 中序列化期间会发生什么?

java - Android 应用程序错误应用程序在安装时崩溃

xml - 将自定义字段添加到 paypal 模块 magento 1.9