属性を含むXMLにシリアライズする方法?
-
20-09-2019 - |
質問
私はこのコードを持っています:
...
request data = new request();
data.username = formNick;
xml = data.Serialize();
...
[System.Serializable]
public class request
{
public string username;
public string password;
static XmlSerializer serializer = new XmlSerializer(typeof(request));
public string Serialize()
{
StringBuilder builder = new StringBuilder();
XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
settings.Encoding = Encoding.UTF8;
serializer.Serialize(
System.Xml.XmlWriter.Create(builder, settings ),
this);
return builder.ToString();
}
public static request Deserialize(string serializedData)
{
return serializer.Deserialize(new StringReader(serializedData)) as request;
}
}
私はいくつかのノードに属性を追加し、いくつかのサブノードを作成します。また、このようなXMLを解析する方法:
<answer>
<player id="2">
<coordinate axis="x"></coordinate>
<coordinate axis="y"></coordinate>
<coordinate axis="z"></coordinate>
<action name="nothing"></action>
</player>
<player id="3">
<coordinate axis="x"></coordinate>
<coordinate axis="y"></coordinate>
<coordinate axis="z"></coordinate>
<action name="boom">
<1>1</1>
<2>2</2>
</action>
</player>
</answer>
それは、HTTPサーバからの回答ですが、XMLファイルではありません。
解決
あなたがサーバーから受信されるXMLを記述したXSDファイルを持っていた場合、それが最善でしょう。あなたは、適切な.NETがそれらの属性と.NETのクラスを生成するためにXsd.exeではプログラムを使用することができます。その後、ちょうどXmlSerializer.Deserialize
を使用することができます。
私は手であなたのためのそのようなクラスを作成しようとするつもりです。これは、(私は仕事に戻って取得する必要があります!)迅速な試みになり、間違っている可能性があります。
<時間>このを試してみて、それが動作するかどうかを確認します。
using System.Collections.Generic;
using System.Xml;
using System.Xml.Serialization;
[XmlRoot("answer")]
public class Answer
{
[XmlElement]
public List<Player> Players { get; set; }
}
public class Player
{
[XmlAttribute("id")]
public int ID { get; set; }
[XmlElement]
public List<Coordinate> Coordinates { get; set; }
[XmlElement("action")]
public PlayerAction Action { get; set; }
}
public class PlayerAction
{
[XmlAttribute("name")]
public string Name { get; set; }
[XmlAnyElement]
public XmlElement[] ActionContents { get; set; }
}
public enum Axis
{
[XmlEnum("x")]
X,
[XmlEnum("y")]
Y,
[XmlEnum("z")]
Z
}
public class Coordinate
{
[XmlAttribute("axis")]
public Axis Axis { get; set; }
[XmlText]
public double Value { get; set; }
}
所属していません StackOverflow