将XML序列化为CSharp类

时间:2015-06-05 08:59:54

标签: c# json xml visual-studio serialization

我在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);
}

` 我得到一个例外,调试显示什么都没有。我的代码中缺少什么东西吗?

1 个答案:

答案 0 :(得分: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);
    }
}