-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSerializer.php
executable file
·103 lines (96 loc) · 2.13 KB
/
Serializer.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<?php
class Serializer
{
private static $Data;
private function GetaArray($arrayValue)
{
foreach ($arrayValue as $Member)
{
$this->SerializeClass($Member,get_class($Member));
}
}
public function Serialize($ObjectInstance,$ClassName)
{
Serializer::$Data.="<Root>";
$this->SerializeClass($ObjectInstance,$ClassName);
Serializer::$Data.="</Root>";
return Serializer::$Data;
}
public function SerializeClass($ObjectInstance,$ClassName)
{
Serializer::$Data.="<".$ClassName.">";
$Class=new ReflectionClass($ClassName);
$ClassArray=array($ObjectInstance);
$Properties=$Class->getProperties();
$i=0;
foreach ($ClassArray as $ClassMember)
{
$prpName= $Properties[$i]->getName();
Serializer::$Data.="<".$prpName.">";
$prpType= gettype($ClassMember);
if ($prpType=='object')
{
$serializerinstance= new Serializer();
$serializerinstance->SerializeClass($ClassMember,get_class($ClassMember));
}
if ($prpType=='array')
{
$this->GetaArray($ClassMember);
}
else
{
Serializer::$Data.=$ClassMember;
}
Serializer::$Data.="</".$prpName.">";
$i++;
}
Serializer::$Data.="</".$ClassName.">";
return Serializer::$Data;
}
public function WriteXmlFile($XmlData,$FilePath)
{
$Xml = simplexml_load_string($XmlData);
$Doc=new DOMDocument();
$Doc->loadXML($Xml->asXML());
$Doc->save($FilePath);
}
public function DeserializeClass($xmlString)
{
$Xml=simplexml_load_string($xmlString, Account());
return $this->Deserialize($Xml);
}
public function Deserialize($Root)
{
$result=null;
$counter=0;
foreach ($Root as $member)
{
$instance = new ReflectionClass($member->getName());
$ins=$instance->newInstance();
foreach ($member as $child)
{
$rp=$instance->getMethod("set_".$child->getName());
if (count($child->children())==0)
{
$rp->invoke($ins,$child);
}
else
{
$rp->invoke($ins,$this->Deserialize($child->children()));
echo $child;
}
}
if (count($Root)==1) {
return $ins;
}
else
{
$result[$counter]=$ins;
$counter++;
}
if ($counter==count($Root)) {
return $result;
}
}
}
}