反序列化字符串C#时出现问题

时间:2012-08-30 14:35:00

标签: xml string serialization

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

因此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,如果我从文件而不是字符串加载,则类值会正确填充。

1 个答案:

答案 0 :(得分:1)

查看xmlSerializer中可用的事件:UnknownAttribute,UnknownElement,UnknownNode,UnreferencedObject。设置事件处理程序以在发生这些事件时处理这些事件。这些事件产生的数据应该引导您找到数据未显示在对象中的正确方向。