Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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_Deserialization - Fatal编程技术网

C# 在c中反序列化xml文件时为标记添加属性#

C# 在c中反序列化xml文件时为标记添加属性#,c#,xml,deserialization,C#,Xml,Deserialization,我的xml有属性。如何声明这些变量以进行反序列化。 xml如下所示 <LabelRequest Test="NO" LabelType="DEFAULT" LabelSubtype="NONE" LabelSize="4x6" ImageFormat="PNG"> <MailpieceShape>FLAT</MailpieceShape> <Services Open="On" /> <Options mail="off" />

我的xml有属性。如何声明这些变量以进行反序列化。 xml如下所示

<LabelRequest   Test="NO" LabelType="DEFAULT" LabelSubtype="NONE" LabelSize="4x6" ImageFormat="PNG">
 <MailpieceShape>FLAT</MailpieceShape>
 <Services Open="On" />
 <Options mail="off" />
</LabelRequest>

但是它显示的Xml文档中好像有错误。我应该如何声明属性?

您的类应该是这样的:

    public class LabelRequest
{
    [XmlAttribute]
    public string Test { get; set; }

    [XmlAttribute]
    public string LabelType { get; set; }

    [XmlAttribute]
    public string LabelSubtype { get; set; }

    [XmlAttribute]
    public string LabelSize { get; set; }

    [XmlAttribute]
    public string ImageFormat { get; set; }

    public string MailpieceShape { get; set; }

    public Services Services { get; set; }

    public Options Options { get; set; }
}

public class Services
{
    public string Open { get; set; }
}

public class Options
{
    public string mail { get; set; }
}

你的班级应该是这样的:

    public class LabelRequest
{
    [XmlAttribute]
    public string Test { get; set; }

    [XmlAttribute]
    public string LabelType { get; set; }

    [XmlAttribute]
    public string LabelSubtype { get; set; }

    [XmlAttribute]
    public string LabelSize { get; set; }

    [XmlAttribute]
    public string ImageFormat { get; set; }

    public string MailpieceShape { get; set; }

    public Services Services { get; set; }

    public Options Options { get; set; }
}

public class Services
{
    public string Open { get; set; }
}

public class Options
{
    public string mail { get; set; }
}

这是工作100%。我刚刚将
mail
属性更改为
mail
,因此属性的命名转换是正确的

class Program
{
    static void Main()
    {
        Requester objectToDeserialize;

        using (Stream stream = File.Open("file.xml", FileMode.Open))
        {
            XmlSerializer deserializer = new XmlSerializer(typeof(Requester));
            objectToDeserialize = (Requester)deserializer.Deserialize(stream);
        }

        Console.WriteLine(objectToDeserialize.Test);
        Console.WriteLine(objectToDeserialize.LabelType);
        Console.WriteLine(objectToDeserialize.LabelSubtype);
        Console.WriteLine(objectToDeserialize.LabelSize);
        Console.WriteLine(objectToDeserialize.ImageFormat);
        Console.WriteLine(objectToDeserialize.MailpieceShape);
        Console.WriteLine(objectToDeserialize.Services.Open);
        Console.WriteLine(objectToDeserialize.Options.Mail);

        Console.ReadLine();
    }
}

[XmlRoot(ElementName = "LabelRequest")]
public class Requester
{
    [XmlAttribute]
    public string Test { get; set; }
    [XmlAttribute]
    public string LabelType { get; set; }
    [XmlAttribute]
    public string LabelSubtype { get; set; }
    [XmlAttribute]
    public string LabelSize { get; set; }
    [XmlAttribute]
    public string ImageFormat { get; set; }
    public string MailpieceShape { get; set; }
    public Services Services { get; set; }
    public Options Options { get; set; }
}

public class Services
{
    [XmlAttribute]
    public string Open { get; set; }
}

public class Options
{
    [XmlAttribute]
    public string Mail { get; set; }
}
本例中的XML:

<?xml version="1.0" encoding="utf-8" ?>
<LabelRequest Test="NO" LabelType="DEFAULT" LabelSubtype="NONE" LabelSize="4x6" ImageFormat="PNG">
  <MailpieceShape>FLAT</MailpieceShape>
  <Services Open="On" />
  <Options Mail="off" />
</LabelRequest>

平的

这是100%有效。我刚刚将
mail
属性更改为
mail
,因此属性的命名转换是正确的

class Program
{
    static void Main()
    {
        Requester objectToDeserialize;

        using (Stream stream = File.Open("file.xml", FileMode.Open))
        {
            XmlSerializer deserializer = new XmlSerializer(typeof(Requester));
            objectToDeserialize = (Requester)deserializer.Deserialize(stream);
        }

        Console.WriteLine(objectToDeserialize.Test);
        Console.WriteLine(objectToDeserialize.LabelType);
        Console.WriteLine(objectToDeserialize.LabelSubtype);
        Console.WriteLine(objectToDeserialize.LabelSize);
        Console.WriteLine(objectToDeserialize.ImageFormat);
        Console.WriteLine(objectToDeserialize.MailpieceShape);
        Console.WriteLine(objectToDeserialize.Services.Open);
        Console.WriteLine(objectToDeserialize.Options.Mail);

        Console.ReadLine();
    }
}

[XmlRoot(ElementName = "LabelRequest")]
public class Requester
{
    [XmlAttribute]
    public string Test { get; set; }
    [XmlAttribute]
    public string LabelType { get; set; }
    [XmlAttribute]
    public string LabelSubtype { get; set; }
    [XmlAttribute]
    public string LabelSize { get; set; }
    [XmlAttribute]
    public string ImageFormat { get; set; }
    public string MailpieceShape { get; set; }
    public Services Services { get; set; }
    public Options Options { get; set; }
}

public class Services
{
    [XmlAttribute]
    public string Open { get; set; }
}

public class Options
{
    [XmlAttribute]
    public string Mail { get; set; }
}
本例中的XML:

<?xml version="1.0" encoding="utf-8" ?>
<LabelRequest Test="NO" LabelType="DEFAULT" LabelSubtype="NONE" LabelSize="4x6" ImageFormat="PNG">
  <MailpieceShape>FLAT</MailpieceShape>
  <Services Open="On" />
  <Options Mail="off" />
</LabelRequest>

平的

什么是错误消息?没有属性,它工作正常。但是我添加属性,它显示错误-“XML文档(1,2)中有错误”什么是错误消息?没有属性,它工作正常。但是我添加属性,它显示错误-“XML文档(1,2)中有错误”是的,好的。如果有这样的xml,我必须做什么。请看我的编辑question@sindhujampani,对于复杂节点,您需要声明新类。你可以看这里,这篇文章是完整的答案更新是的,好的。如果有这样的xml,我该怎么做。请看一下我的编辑question@sindhujampani,对于复杂节点,您需要声明新类。你可以看看这里,这篇文章是非常完整的答案更新,我得到的是open和mail的值,这是null不能得到的。在粘贴到这里之前,我在我的电脑上测试了这段代码。我得到的open和mail的值不能为null。在粘贴到这里之前,我在我的电脑上测试了这段代码。