【问题标题】:Serialize XML into CSharp class将 XML 序列化为 CSharp 类
【发布时间】:2015-06-05 08:59:53
【问题描述】:

我在 json 数据字段中有一个 xml 字符串。我想提取该值并将其与该字段的数据库值进行比较。

我使用 xsd.exe 为该 xml 生成类(从 here 看到)。我正在使用该类来反序列化 xml 响应。然后我使用here的方法进行反序列化。

我用过

`XmlSerializer serializer1 = new XmlSerializer(typeof(class_gen_from_xml))

在下面的代码中,我从 json 响应中提取了 xml 源,然后执行如下操作:

string xmlSource = "<ResultSet><Result precision=\"address\">    <Latitude>47.643727</Latitude></Result></ResultSet>";

XmlSerializer serializer = new XmlSerializer(typeof(ResultSet));
ResultSet output;

using (StringReader reader = new StringReader(xmlSource))
{
   output = (ResultSet)serializer.Deserialize(reader);
}

` 我得到了一个异常,调试什么也没显示。我在代码中遗漏了什么吗?

【问题讨论】:

  • 你得到什么样的异常?
  • @Fabio NullReferenceException 发生
  • 为什么拒绝投票是一个很好的问题,结合了 SO 上的两个现有帖子。
  • 我没有在您的代码中看到可以生成 NullReferenceException 的行
  • 这些异常与问题中发布的代码无关。给我们一个抛出异常的代码

标签: c# json xml visual-studio serialization


【解决方案1】:

您的 ResultSet 课程可能有问题,这对我来说很好:

[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class ResultSet
{
    private ResultSetResult[] resultField;

    [System.Xml.Serialization.XmlElementAttribute("Result")]
    public ResultSetResult[] Result
    {
        get
        {
            return this.resultField;
        }
        set
        {
            this.resultField = value;
        }
   }
}

[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class ResultSetResult
{
    private decimal latitudeField;
    private string precisionField;

    public decimal Latitude
    {
        get
        {
            return this.latitudeField;
        }
        set
        {
           this.latitudeField = value;
        }
    }

    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string precision
    {
        get
        {
            return this.precisionField;
        }
        set
        {
            this.precisionField = value;
        }
    }
}

使用您的反序列化代码:

static void Main(string[] args)
{
    string xmlSource = "<ResultSet><Result precision=\"address\">    <Latitude>47.643727</Latitude></Result></ResultSet>";

    XmlSerializer serializer = new XmlSerializer(typeof(ResultSet));
    ResultSet output;

    using (StringReader reader = new StringReader(xmlSource))
    {
        output = (ResultSet)serializer.Deserialize(reader);
    }
}

【讨论】:

  • 我将它与另一个类一起使用,但我得到了 NullReferenceException。
  • 不,我尝试将它与另一个 xml 一起使用并生成它的类,但它不起作用,是否有某些东西丢失或异常,您能否建议寻找解决异常的方向?
  • @Novak007 你试过用什么?相同的反序列化代码或具有另一个 XML 结构的类?你为什么希望它起作用?它基于ResultSet XML...您的错误消息与您的问题完全无关。您需要发布其余代码。
  • @Novak007 这适用于您的 OP 中的示例吗?您是否更新了反序列化代码中的类型?贴出代码/XML,看不到就帮不上忙了。
  • @Novak007 除非我们能看到您的代码,否则错误消息毫无意义。我的回答成功反序列化了您提供的ResultSet XML,看来您现在遇到了完全不同的问题?
猜你喜欢
  • 1970-01-01
  • 2010-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-23
  • 1970-01-01
相关资源
最近更新 更多