在Silverlight中,一个复杂的业务XML到对象反序列化来统治它们

本文关键字:反序列化 对象 XML 业务 Silverlight 复杂 一个 | 更新日期: 2023-09-27 18:10:11

我一直在寻找一些时间教程和帖子如何将复杂的XML文档反序列化为对象,并在silverlight应用程序中使用它。我看过很多2008年和2009年的教程和帖子,其中很多显然不起作用。这是有点容易与你好世界或类"人"的工作,但我找不到任何关于一些复杂的xml文件和数据对象的好东西。这3行解析代码不是问题,但是c#代码看起来像什么?我如何创建所有这些类?如何处理这些对象?

让我们想象一下,你从Web服务中获得一个流,或者在你的逻辑中有一个这样的字符串。你有名称空间,属性和6个子节点。

<?xml version="1.0" encoding="UTF-8"?>
<om:root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:om="http://www.opengis.net/om/1.0">
<a name="a1">
<b>
    <c id="1" name="C1">
        <d id="1" name="D1">My name is D1</d>
        <d id="2" name ="D2">My name is D2</d>
        <e>
            <f>this is f1</f>
        </e>
    </c>
    <c id="2" name="C2">
        <d id="3" name="D3">My name is D3</d>
        <e>
            <f>this is f2</f>
        </e>
    </c>
</b>
<b>
    <c id="3" name="C3">
        <d id="4" name="D5">My name is D4</d>
        <d id="5" name="D5">My name is D5</d>
        <d id="6" name="D6">My name is D6</d>
        <d id="7" name="D7">My name is D7</d>
        <e>
            <f>this is f3</f>
        </e>
    </c>
</b>
</a>
</om:root>

1)是否有任何网站,它可以创建类和c#代码,以便能够在xml内工作/存储数据?你发布你的xml文件,你得到你的c#类的源代码。比如www.json2csharp.com

2)我的类、属性等会是什么样子?我希望看到一种标准的现代最先进的处理属性、属性、列表等的方式。完整的代码用"using xxx"!请使用标准的序列化器类,它将与Silverlight一起工作!

3)一些对象动作。像

  1. 给我所有的名字:c在一个列表
  2. 给我f在nom中的值:c id="2"
  3. 将所有b放入列表
  4. 给我所有属性值从name="从所有测试:d节点

只是一些严肃的实际查询而不是那些简单的get.me.person.name或book.name

好吧,也许这太难了。谁能贴一些链接,至少有一种教程或一些例子的博客?

在Silverlight中,一个复杂的业务XML到对象反序列化来统治它们

要从xml生成c#类,您可以使用Microsoft工具xsd.exe。

我自己就是个初学者,但如果我是你,我肯定会研究System.Xml.Linq类。当您已经确定了您的类之后,对文档进行反序列化应该非常简单。下面我粘贴了一个片段,从我的代码,这正是你想要的。这是WP7,但除了IsolatedStorage部分,一切都应该是一样的。

ItemTemplate item = new ItemTemplate();
        using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
        {
            using (IsolatedStorageFileStream stream = myIsolatedStorage.OpenFile("/Items.xml", FileMode.Open))
            {
                XElement doc = XElement.Load(stream);
                IEnumerable<XElement> itemTest = from el in doc.Elements("item")
                                                 where (string)el.Element("id") == itemId
                                                 select el;
                foreach (XElement el in itemTest)
                {
                    item.ItemContent = el.Element("content").Value;
                    item.Status = Convert.ToBoolean(el.Element("status").Value);
                    item.Notes = el.Element("notes").Value;
                    item.Location = el.Element("location").Value;
                    item.Deadline = Convert.ToDateTime(el.Element("deadline").Value);
                }                  
            }
        }