相关疑难解决方法(0)

将键/值对列表序列化为XML

我有一个键/值对列表,我想存储和从XML文件中检索.所以此任务与此处描述的类似.我试图遵循标记答案中的建议(使用KeyValuePairXmlSerializer),但我没有得到它的工作.

到目前为止,我所拥有的是"设置"课程......

public class Settings
{
    public int simpleValue;
    public List<KeyValuePair<string, int>> list;
}
Run Code Online (Sandbox Code Playgroud)

......这个班的一个例子......

Settings aSettings = new Settings();

aSettings.simpleValue = 2;

aSettings.list = new List<KeyValuePair<string, int>>();
aSettings.list.Add(new KeyValuePair<string, int>("m1", 1));
aSettings.list.Add(new KeyValuePair<string, int>("m2", 2));
Run Code Online (Sandbox Code Playgroud)

...以及将该实例写入XML文件的以下代码:

XmlSerializer serializer = new XmlSerializer(typeof(Settings));
TextWriter writer = new StreamWriter("c:\\testfile.xml");
serializer.Serialize(writer, aSettings);
writer.Close();
Run Code Online (Sandbox Code Playgroud)

生成的文件是:

<?xml version="1.0" encoding="utf-8"?>
<Settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <simpleValue>2</simpleValue>
  <list>
    <KeyValuePairOfStringInt32 />
    <KeyValuePairOfStringInt32 />
  </list>
</Settings>
Run Code Online (Sandbox Code Playgroud)

因此,虽然元素的数量是正确的,但是我的列表中的对的键和值都没有存储.显然我做的事情基本上是错的.我的问题是:

  • 如何将列表的键/值对存储在文件中?
  • 如何将列表中元素的默认生成名称"KeyValuePairOfStringInt32"更改为我想要的其他名称,如"listElement"?

.net xml list xml-serialization

30
推荐指数
1
解决办法
3万
查看次数

使用代码默认值对集合属性进行 XML 反序列化

对于应用程序配置,我经常会创建一个配置类,其中包含应用程序的配置值,然后将其反序列化为要使用的对象。配置对象通常与用户界面控件进行数据绑定,以便用户可以更改和保留配置。配置类通常具有分配给属性的默认值,以便始终存在默认配置。这效果很好。我最近遇到了一种情况,我有一个提供一些默认路径信息的字符串列表。我所看到的让我意识到我并不完全知道在 XML 反序列化到对象期间如何填充对象属性。

所以我创建了一个简单的示例来展示该行为。下面是一个简单的类,它有几个具有一些代码默认值的属性。

[Serializable]
public class TestConfiguration
   {
      public String Name 
      { 
         get
         {
            return mName;
         }
         set
         {
            mName = value;
         }
      }private String mName = "Pete Sebeck";

  public List<String> Associates 
  { 
     get
     {
        return mAssociates;
     }
     set
     {
        mAssociates = value;
     }
  } private List<String> mAssociates = new List<string>() { "Jon", "Natalie" };

  public override String ToString()
  {
     StringBuilder buffer = new StringBuilder();
     buffer.AppendLine(String.Format("Name: {0}", Name));
     buffer.AppendLine("Associates:");
     foreach(String associate in mAssociates)
     {
        buffer.AppendLine(String.Format("\t{0}", associate));
     }
     return buffer.ToString(); …
Run Code Online (Sandbox Code Playgroud)

c# xml serialization xmlserializer

5
推荐指数
1
解决办法
1623
查看次数

如何将动态对象序列化为 xml c#

我有一个里面object {System.Collections.Generic.List<object>}包含 1000 个object {DynamicData},每个有 4 个键和值,另一个List有 2 个键和值。我需要将这个对象序列化为一个 XML 文件,我尝试了正常的序列化,但它给了我这个异常 = The type DynamicData was not expected,我如何序列化这个对象?

这是代码:

           //output is the name of my object
            XmlSerializer xsSubmit = new XmlSerializer(output.GetType());
            var xml = "";

            using (var sww = new StringWriter())
            {
                using (XmlWriter writers = XmlWriter.Create(sww))
                {
                    try
                    {
                        xsSubmit.Serialize(writers, output);
                    }
                    catch (Exception ex)
                    {

                        throw;
                    }
                    xml = sww.ToString(); // Your XML
                }
            }
Run Code Online (Sandbox Code Playgroud)

我可以逐行和逐个元素地创建 xml 文件,但我想要更快、更少代码的东西。我的对象的结构是这样的:

output (count 1000) …
Run Code Online (Sandbox Code Playgroud)

c# xml xml-serialization xmlserializer dynamicobject

5
推荐指数
1
解决办法
7709
查看次数