0

我从 php 脚本的输出中提取 xml 数据。它的工作方式是 php 脚本将 xml 数据输出到 html 页面,而我使用的 API 将显示在该页面上的所有文本数据拉到一个字符串中。

所以 html/php 的输出应该是非常标准的 xml 格式,我研究了它并更改了 php 以确保即使是最小的细节也能正确输出。

然后我使用以下代码将字符串反序列化到我的类中。

public static object XmlDeserializeFromFile(Type type, string strPath)
{
    object data;

    try
    {
        using (StreamReader reader = new StreamReader(strPath))
        {
            XmlSerializer serializer = new XmlSerializer(type);
            data = serializer.Deserialize(reader);
            reader.Close();
        }
    }
    catch(Exception exception)
    {
        Debug.LogError (exception);
        data = type.GetConstructor(Type.EmptyTypes).Invoke(null);
    }

    return data;
}

所以问题是从我的代码中解析字符串时没有遇到异常,这让我认为它在某些方面起作用。但是,该类仍然返回空值。我还验证了字符串是否被正确收集,因为它在我的调试器中显示了完整的 xml 内容。

使用以下代码测试类 Im。

    MyClass member = (MyClass)XmlDeserializeFromFile(typeof(MyClass), MyString);
    if(member != null)
    {
        Debug.Log(member.a);
    }
    else
    {
        Debug.Log("Not Loaded");
    }

我的调试器中的结果一直显示 member.a = null。

我的类属性都是公开的 {get; set;} 并完全匹配 xml,如果我从文件而不是字符串加载,则类值会正确填充。

4

1 回答 1

1

看看 xmlSerializer 中可用的事件:UnknownAttribute、UnknownElement、UnknownNode、UnreferencedObject。设置事件处理程序以处理这些事件(如果/何时发生)。从这些事件中产生的数据应该会引导您正确了解数据未显示在对象中的原因。

于 2012-08-30T15:24:46.597 回答