如何捕获/发送带有各种子数组的XML文档



我正在使用一些web服务,遇到了一些无法解决的难题。我正在处理一个主对象数组中另一个对象数组中的对象数组。

我使用的各种对象如下:

公共类OBJECT1

公共字符串项1;

公共字符串项2;

公共字符串项3;

}

公共类OBJECT2

公共字符串项1;

公共字符串项2;

public OBJECT1[]item3;

}

公共类OBJECT3

公共字符串项1;

公共字符串项2;

public OBJECT2[]item3;

}

因此,当我查阅一个基于三个对象中一个对象中的一个元素的数据库时,我的困惑就来了。

让我解释一下:

当我从OBJECT1中搜索一个元素时,我可以从其他对象中获得一个或多个项目。问题是:如何将所有信息放在表、XML文档或数据集中?我真的不知道从哪里开始,因为我想做一个这样的结构:

Object3[N]

第1项

第2项

对象2[1]ítem1第2项

 Object1[1]
     item1
     item2
     item3
  Object1[2]
     item1
     item2
     item3
  Object1[3]
     .
     .  
     .
  Object1[N]

对象2[2]ítem1第2项

 Object1[1]
     item1
     item2
     item3
  Object1[2]
     item1
     item2
     item3
  Object1[3]
     .
     .  
     .
  Object1[N]

对象2[3]ítem1第2项

 Object1[1]
     item1
     item2
     item3
  Object1[2]
     item1
     item2
     item3
  Object1[3]
     .
     .  
     .
  Object1[N]

。。对象2[N]ítem1第2项

 Object1[1]
     item1
     item2
     item3
  Object1[2]
     item1
     item2
     item3
  Object1[3]
     .
     .  
     .
  Object1[N]

Object3[N]

第1项

第2项

对象2[1]ítem1第2项

 Object1[1]
     item1
     item2
     item3
  Object1[2]
     item1
     item2
     item3
  Object1[3]
     .
     .  
     .
  Object1[N]

对象2[2]ítem1第2项

 Object1[1]
     item1
     item2
     item3
  Object1[2]
     item1
     item2
     item3
  Object1[3]
     .
     .  
     .
  Object1[N]

对象2[3]ítem1第2项

 Object1[1]
     item1
     item2
     item3
  Object1[2]
     item1
     item2
     item3
  Object1[3]
     .
     .  
     .
  Object1[N]

。。对象2[N]ítem1第2项

 Object1[1]
     item1
     item2
     item3
  Object1[2]
     item1
     item2
     item3
  Object1[3]
     .
     .  
     .
  Object1[N]

我真的不知道从哪里开始抓这个。我已经得到了结构,但我需要一个提示,从哪里开始。我希望你们能帮助我。

我使用的是Visual Studio 2008 C#、SQL Server和web服务。

我希望任何人都能帮我,无论如何谢谢。

问候。

您可以使用内置的DataContract功能将对象图转换为具有您提到的嵌套的XML文档。

两部分:

  1. 用适当的属性注释类。

    [DataContract(Namespace = "DataContracts")]
    public class Foo
    {
        [DataMember]
        public string First;
        [DataMember]
        public string Second;
        [DataMember]
        public string Third;
    }
    [DataContract(Namespace = "DataContracts")]
    public class Bar
    {
        [DataMember]
        public string First;
        [DataMember]
        public string Second;
        [DataMember]
        public Foo[] ManyFoos;
    }
    [DataContract(Namespace = "DataContracts")]
    public class Root
    {
        [DataMember]
        public string First;
        [DataMember]
        public string Second;
        [DataMember]
        public Bar[] ManyBars;
    }
    
  2. 使用DataContractSerializer将对象图转换为XML文档。

    var root = new Root()
    {
        ... snip, object initialization ...
    };
    var serializer = new DataContractSerializer(typeof(Root));
    var xmlStringBuilder = new StringBuilder();
    using (var xmlWriter = XmlWriter.Create(xmlStringBuilder, new XmlWriterSettings() { Indent = true }))
    {
        serializer.WriteObject(xmlWriter, root);
    }
    var xmlString = xmlStringBuilder.ToString();
    

这将生成以下XML(无论如何,对于我的示例)。

<?xml version="1.0" encoding="utf-16"?>
<Root xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="DataContracts">
  <First>Root01_First</First>
  <ManyBars>
    <Bar>
      <First>Bar01_First</First>
      <ManyFoos>
        <Foo>
          <First>Foo01_First</First>
          <Second>Foo01_Second</Second>
          <Third>Foo01_Third</Third>
        </Foo>
        <Foo>
          <First>Foo02_First</First>
          <Second>Foo02_Second</Second>
          <Third>Foo02_Third</Third>
        </Foo>
      </ManyFoos>
      <Second>Bar01_Second</Second>
    </Bar>
    <Bar>
      <First>Bar02_First</First>
      <ManyFoos>
        <Foo>
          <First>Foo03_First</First>
          <Second>Foo03_Second</Second>
          <Third>Foo03_Third</Third>
        </Foo>
      </ManyFoos>
      <Second>Bar02_Second</Second>
    </Bar>
  </ManyBars>
  <Second>Root01_Second</Second>
</Root>

最新更新