【问题标题】:Inter-process communication with XML in C#在 C# 中使用 XML 进行进程间通信
【发布时间】:2014-05-19 08:11:12
【问题描述】:

我有两个应用程序:X 和 Y。 X 有一组变量(存储在一个类的对象中),它们必须转移到 Y。我打算使用一个 XML 文件作为存储在磁盘上的记录,两个应用程序都可以按名称访问它。 X 将数据写入该 XML 文件,Y 读取它。

我认为我可以使用 XmlSerializer (System.Xml.Serialization) 来完成此操作。使用 XmlSerializer,我可以创建一个如下所示的 XML 文件:

<MonsterCollection>
  <Monsters>
    <Monster name="a">
     <Health>5</Health>
    </Monster>
    <Monster name="b">
     <Health>3</Health>
    </Monster>
  </Monsters>
</MonsterCollection>

当 Y 读取这个 XML 文件时,它并不知道变量 Health 的实际数据类型。因此,必须在 X 和 Y 中定义原始类。有没有办法将数据类型也存储在 XML 文件中?最后,我想完成这样的事情:

<Monster name="a" type="" help="This is a monster">
  <var name="Health" type="uint16" val="5" help="Healthiness of this monster" /> 
</Monster>
<Monster name="b" type="" help="This is a monster">
  <var name="Health" type="uint16" val="3" help="Healthiness of this monster" /> 
</Monster>

【问题讨论】:

标签: c# xml xml-serialization ipc


【解决方案1】:

你可以使用下面提到的代码

 public class Monster 
{
    [XmlAttribute("name")]
    public string name {get;set;}
    [XmlAttribute("type")]
    public string type {get;set;}
    [XmlAttribute("val")]
    public int val { get; set; }
}

参考serialize-object-to-element

【讨论】:

  • 感谢您的回答!!我想知道,是否有办法避免在应用程序 X 和 Y 中声明类“Monster”。即使我使用 XmlAttribute 将数据存储为属性(而不是元素),我仍然必须声明类“Monster”在应用 Y 中也是如此。对吗?
  • 如果您将第一个应用程序的 dll 用于您的第二个应用程序,那么您不需要再次创建该类
  • 非常感谢!这正是我一直在寻找的。我只需要使用 dll 的 :-)。这样,我什至不必再使用 XmlAttribute。或者您知道当我反序列化应用程序 Y 中的 XML 文件时,我如何使用存储为 XmlAttribute 的数据类型?
  • 你可以使用 typeof 键
  • 您可以将 var 中的值转换为您从 xml 收到的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
相关资源
最近更新 更多