【问题标题】:Deserialize into a list inside the deserialized class?反序列化成反序列化类中的列表?
【发布时间】:2015-04-06 10:32:21
【问题描述】:

小样本:

<head>
    <coordinate>
    ...
    </coordinate>

    <coordinate>
    ...
    </coordinate>

    <coordinate>
    ...
    </coordinate>

    <coordinate>
    ...
    </coordinate>
    etc.
</head>

这应该会导致:

public class Head
{
    public coordinate[] coordinates;
}

将对象转换为“Head”类型后,第一个代码示例的反序列化是否会导致第二个代码示例?

public static void Main(string[] args)
{
    XmlSerializer deserializer = new XmlSerializer(typeof(Head));
    TextReader reader = new StreamReader("file.xml");
    Head obj = (Head)deserializer.Deserialize(reader);
    reader.Close();
}

【问题讨论】:

  • 你想添加你的反序列化代码吗?
  • 这是一个相当大的项目,所以我只想 100% 确定可以反序列化为反序列化类中的数组。不幸的是,序列化是我在编程的几年中错过的东西。
  • @Solrik 我的answer 有帮助吗?

标签: c# arrays xml deserialization


【解决方案1】:

您可以通过以下方式反序列化给定的 xml,具有 coordinate xml 元素的平面序列。

您的示例 XML:

<head>
    <coordinate>
    ...
    </coordinate>

    <coordinate>
    ...
    </coordinate>

    <coordinate>
    ...
    </coordinate>

    <coordinate>
    ...
    </coordinate>
    etc.
</head>

模型类:

[XmlElement(ElementName = "head")]
public class Head
{
    [XmlElement(ElementName = "coordinate")]
    public coordinate[] coordinates;
}

将上面的模型类反序列化为Head 应该可以与您的以下代码一起使用..

public static void Main(string[] args)
{
    XmlSerializer deserializer = new XmlSerializer(typeof(Head));
    TextReader reader = new StreamReader("file.xml");
    Head obj = (Head)deserializer.Deserialize(reader);
    reader.Close();
}

我所做的是用[XmlElement] 属性装饰coordinates 属性。因此,您只需要修改上面的模型类以正确映射给定的 xml 示例。更多示例您可以在下面的 msdn 参考链接中找到。

参考:MSDN - Serializing an Array as a Sequence of Elements

【讨论】:

    【解决方案2】:

    类的序列化

    public class Head
    {
       public coordinate[] coordinates;
    }
    

    <Head>
      <coordinates>
         <coordinate />
         <coordinate />
         ...
      </coordinates>     
    </Head>
    

    但是,如果您想将示例 1 反序列化为一个类,您可以使用这个类模板:

        [XmlRoot(ElementName = "head")]
        public class Head
        {
            [XmlElement]
            public coordinate coordinates { get; set; }
        }
        public class coordinate { }
    

    【讨论】:

      猜你喜欢
      • 2013-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-19
      • 1970-01-01
      • 2012-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多