Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c语言中复杂元素的Xml反序列化_C#_Xml - Fatal编程技术网

C# c语言中复杂元素的Xml反序列化

C# c语言中复杂元素的Xml反序列化,c#,xml,C#,Xml,我在将xml字符串反序列化到对象时遇到了一些问题。我没有收到任何错误,但是值没有填充值不是空值,它们只是。我看了一些有相同问题的问题,但这些问题通常由没有定义[XmlRoot]或[XmlElement]的人组成 以下是我的xml字符串: string xmlString = @"<results><dpv_answer value=""Y"" /><zip value=""95118-4007"" /></results>" 下面是一些对象声明:

我在将xml字符串反序列化到对象时遇到了一些问题。我没有收到任何错误,但是值没有填充值不是空值,它们只是。我看了一些有相同问题的问题,但这些问题通常由没有定义[XmlRoot]或[XmlElement]的人组成

以下是我的xml字符串:

string xmlString = @"<results><dpv_answer value=""Y"" /><zip value=""95118-4007"" /></results>"
下面是一些对象声明:

[XmlRoot("results")]
public class StandardAddress
{
    [XmlElement(ElementName = "dpv_answer")]
    public string dpv_answer { get; set; }
    [XmlElement(ElementName = "zip")]
    public string zip { get; set; }
}
dpv_answer和zip是复杂的元素,而不仅仅是字符串。请尝试以下操作:

[XmlRoot("results")]
public class StandardAddress
{
    [XmlElement(ElementName = "dpv_answer")]
    public dpv_answer dpv_answer { get; set; }

    [XmlElement(ElementName = "zip")]
    public zip zip { get; set; }
}

public class dpv_answer
{
    [XmlAttribute("value")]
    public string Value { get; set; }
}


public class zip
{
    [XmlAttribute("value")]
    public string Value { get; set; }
}
dpv_answer和zip是复杂的元素,而不仅仅是字符串。请尝试以下操作:

[XmlRoot("results")]
public class StandardAddress
{
    [XmlElement(ElementName = "dpv_answer")]
    public dpv_answer dpv_answer { get; set; }

    [XmlElement(ElementName = "zip")]
    public zip zip { get; set; }
}

public class dpv_answer
{
    [XmlAttribute("value")]
    public string Value { get; set; }
}


public class zip
{
    [XmlAttribute("value")]
    public string Value { get; set; }
}

每个元素都有试图从中获取值的属性。此外,属性是相同的,因此,您可以使用单个类,而不是像fcuesta建议的那样拥有多个可序列化类,如下所示:

[XmlRoot("results")]
public class StandardAddress
{
    [XmlElement(ElementName = "dpv_answer")]
    public Element DpvAnswer { get; set; }

    [XmlElement(ElementName = "zip")]
    public Element Zip { get; set; }
}

public class Element
{
    [XmlAttribute("value")]
    public string Value { get; set; }
}

这将适用于类似的元素,这可能很有用。但是,如果您打算在将来将元素更改为它们自己的唯一模式,则它们需要分开,正如fcuesta所建议的那样。

您的每个元素都有您试图从中获取值的属性。此外,属性是相同的,因此,您可以使用单个类,而不是像fcuesta建议的那样拥有多个可序列化类,如下所示:

[XmlRoot("results")]
public class StandardAddress
{
    [XmlElement(ElementName = "dpv_answer")]
    public Element DpvAnswer { get; set; }

    [XmlElement(ElementName = "zip")]
    public Element Zip { get; set; }
}

public class Element
{
    [XmlAttribute("value")]
    public string Value { get; set; }
}

这将适用于类似的元素,这可能很有用。但是,如果您打算在将来将元素更改为它们自己的唯一模式,它们将需要分开,正如fcuesta所建议的那样。

您有一个空的catch{}处理程序,您可能会遇到错误,但不知道?我正在逐步使用调试器,而不是进入catch块。非主题注释:最好使用空格而不是制表符缩进代码。在类中使用[Serializable]如何?试试这个。@AlexandreVicenzi在我尝试了fcuesta的回答之后,我会尝试一下。如果你有一个空的catch{}处理程序,你可能会出错,但并不知道?我正在逐步使用调试器,我不会进入catch块。离题注释:最好用空格而不是制表符缩进代码。那么[Serializable]呢在你们班?试试这个。@AlexandreVicenzi在我尝试了fcuesta的答案之后,我会尝试一下的。是的,我可能会按照你的建议为Element创建类。减少了大量的代码。谢谢。@Brett在做之前阅读了我的评论。@YairNevet它对我来说效果很好,将所有值匹配到正确的位置。@YairNevet元素类不知道它是哪个元素。StandardAddress类就是这样区分的。@LukeWillis是的,你是对的。是的,我可能会按照你的建议为元素创建类。减少了大量的代码。谢谢。@Brett在做之前阅读了我的评论。@YairNevet它对我来说效果很好,将所有值匹配到正确的位置。@YairNevet元素类不知道它是哪个元素。StandardAddress类就是这样区分的。@LukeWillis是的,你说得对。