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>
XML 파일이 아니며 HTTP 서버의 답변입니다.
해결책
서버에서 수신 할 XML을 설명하는 XSD 파일이있는 경우 가장 좋습니다. 그런 다음 xsd.exe 프로그램을 사용하여 적절한 .NET 속성이있는 .NET 클래스를 생성 할 수 있습니다. 그런 다음 사용할 수 있습니다 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