【问题标题】:How can I serialize an XML document with 2 different lists?如何序列化具有 2 个不同列表的 XML 文档?
【发布时间】:2014-08-26 13:30:59
【问题描述】:

好的,我正在使用 ASP MVC 并尝试加载一些 XML 数据,在将其转换为 JSON 时需要对其进行序列化。

我不明白的是,我的 XML 有不止一个后代。那么,当我序列化它时,我需要在模型中将每个后代的数据存储在自己的列表中,对吗?

我已经这样做了,所以我有两个单独的列表。那么,如何将这一切序列化到一个 XML 文档中呢?

这是我的 XML 标记示例:

<vehicle>
<make>Suzuki</make>
<color>Yellow></color>
<owner>
    <id>0</id>
    <name>Joe Bloggs</name>
</owner>
<owner>
    <id>1</id>
    <name>Foo Bar</name>
</owner>
</vehicle>

这是我的 XML 模型:

    public partial class vehicle
    {
        private string makeField;
        private string colorField;

        private vehicleOwner[] ownerField;

        /// <remarks/>
        public string make {get; set;}

        /// <remarks/>
        public string color{get; set;}

        [System.Xml.Serialization.XmlElementAttribute("owner")]
        public vehicleOwner[] owner{ get; set;}

        // Keep this in a list to serialize it
        List<vehicle> vehicleList = new List<vehicle>();
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    public partial class vehicleOwner
    {

        private int idField;

        private string nameField;


        /// <remarks/>
        public int id { get; set;}


        /// <remarks/>
        public string nameField {get; set;}


        // Stick it in a list so I can serialize it later
        List<vehicleOwner> vehicleOwnerList = new List<vehicleOwner>();
    }

}

所以,现在我有两个包含 XML 数据的列表:vehicleOwnerList 和 vehicleList。 但这些都是一个 XML 文档。那么我怎样才能为这两个列表序列化呢?我是否必须将它们合并到一个列表中,如果是,我该怎么做?

所以我.E.

 List<vehicleOwner> listCombinedActions = new List<vehicleOwner>();

                XmlDocument xmlDoc = new XmlDocument();
                XPathNavigator nav = xmlDoc.CreateNavigator();
                using (XmlWriter writer = nav.AppendChild())
                {
                    XmlSerializer ser = new XmlSerializer(typeof(List<vehicle>), new XmlRootAttribute("owner"));
                    ser.Serialize(writer, listCombinedActions);
                }

干杯

【问题讨论】:

  • 首先尝试将Element 属性更改为owner 属性和typeof(vehicle)Array 属性。您也可以使用 xsd.exe 工具通过命令 xsd.exe your.xml xsd.exe your.xsd /classes 从 xml 生成类
  • 好的 - 如果我改变它,这将如何影响它?数据仍存储在两个单独的列表中。我需要将这两个列表序列化为一个 XMLDoc。谢谢
  • 存储在两个列表中是什么意思?为什么需要 XmlDocument?
  • 好吧——也许我做错了什么。看看我发布的 XML 模型。 XML 文档有两部分:车辆和车辆所有者。对于每个部分,我都必须创建一个列表来填充它。有没有办法可以为这两种不同类型创建一个列表?
  • 让我们从头开始。您有 xml 文件,并且想将其数据读取到您的对象中?

标签: c# xml list serialization asp-classic


【解决方案1】:

我希望我了解您想要实现的目标,因此添加示例如何完成:


数据模型:

//NOTE: property, root class names is different. 
//So you can name it what you want but you need to specify xml tag name in attribute

[XmlRoot("vehicle")]
public class vehicleObject
{
    public string make { get; set; }
    public string color { get; set; }

    [System.Xml.Serialization.XmlElement("owner")]
    public List<vehicleOwner> ownerList { get; set; }
}

public class vehicleOwner
{
    public int id { get; set; }

    [System.Xml.Serialization.XmlElement("name")]
    public string nameField { get; set; }
} 

用法:

vehicleObject yourWorkingObject;

using (MemoryStream ms = new MemoryStream(File.ReadAllBytes("c:\\a.xml")))
{
    XmlSerializer serializer = new XmlSerializer(typeof(vehicleObject));
    yourWorkingObject = serializer.Deserialize(ms) as vehicleObject;
}

//Do with yourWorkingObject here what you want

结果:

【讨论】:

  • 谢谢你 - 我真的很感激。但是我现在很困惑的是我如何将它转换为 JSON?我一直在使用具有此方法的 JSON.Net 库:JsonConvert.SerializeXmlNode(XMLDoc to be serialized) - 从我的原始代码中执行此操作很容易,因为我有 XMLDoc 参考
  • 我对Json不熟悉,但我觉得应该是OBJECT转json的一种方式。
  • 我找到了 Json.Net 库文档。应该有JsonConvert.SerializeObject 方法。所以你需要做的是这样的:string myJsonString = JsonConvert.SerializeObject(yourWorkingObject);
  • 未来注意事项:不要拘泥于一件事,探索,你会找到实现目标的新方法。
  • 我爱你!我可以把啤酒送到你家吗? - 谢谢 - 非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多