일부 C# 필드를 XML 파일로 직렬화하는 데 문제가 있습니다. 아래 코드 나는이되어 여러 정보와 시설 목록이있을 수XML 목록 직렬화 (및 직렬화 해제)
<?xml version="1.0" encoding="Windows-1252"?>
<Config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Username>admin</Name>
<Password>123456</VoiceServer>
<Facilities>
<Facility>
<ID>1</ID>
<Name>First Facility</Name>
<Profiles>
<Profile>
<SomeItem>Value</SomeItem>
<AnotherItem>Value</AnotherItem>
</Profile>
<Profile>
<SomeItem>Value</SomeItem>
<AnotherItem>Value</AnotherItem>
</Profile>
<Profile>
<SomeItem>Value</SomeItem>
<AnotherItem>Value</AnotherItem>
</Profile>
</Profiles>
</Facility>
<Facility>
<ID>2</ID>
<Name>Second Facility</Name>
<Profiles>
<Profile>
<SomeItem>Value</SomeItem>
<AnotherItem>Value</AnotherItem>
</Profile>
<Profile>
<SomeItem>Value</SomeItem>
<AnotherItem>Value</AnotherItem>
</Profile>
<Profile>
<SomeItem>Value</SomeItem>
<AnotherItem>Value</AnotherItem>
</Profile>
</Profiles>
</Facility>
</Facilities>
</Config>
주의 사항 :
public class Facility
{
public string ID = "";
public string Name = "";
public List<Profile> Profiles { get; set; }
}
public class PrefSet
{
public string SomeItem = "";
public string AnotherItem = "";
}
public class Config
{
public string Username = "";
public string Password = "";
public List<Facility> Facilities { get; set; }
public static void SerializeObjectToFile<T>(T dataToSerialize, string filePath)
{
try
{
using (Stream stream = File.Open(filePath, FileMode.Create, FileAccess.ReadWrite))
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
XmlTextWriter writer = new XmlTextWriter(stream, Encoding.Default);
writer.Formatting = Formatting.Indented;
serializer.Serialize(writer, dataToSerialize);
writer.Close();
}
}
catch
{
File.Create(filePath);
}
}
public static T DeserializeObjectFromFile<T>(string filePath)
{
try
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
T serializedData;
using (Stream stream = File.Open(filePath, FileMode.Open, FileAccess.Read))
{
serializedData = (T)serializer.Deserialize(stream);
}
return serializedData;
}
catch
{
throw;
}
}
}
나는 그래서이 같은 XML 출력을해야합니다을 구성 할.
Config config = new Config();
Facility fac = new Facility();
Profile prof = new Profile();
if (File.Exists(CONFIG_FILE)) config = Config.DeserializeObjectFromFile<Config>(CONFIG_FILE);
fac.ID = "1";
fac.Name = "Facility One";
prof.SomeItem = "Value";
prof.AnotherItem = "Value";
config.Facilities.Add(fac);
fac.Profiles.Add(prof);
Config.SerializeObjectToFile<Config>(config, CONFIG_FILE);
는 또한, 예를 들어, 내가 항목에 대한 변경 사항을 수정하고 저장할 수 있도록하려면 다음은
내가 직렬화를 실행하는 데 사용하고 코드입니다.내가 가지고있는 문제는 형식으로 XML을 만들지 만, 값을 변경하면 기존 시설 목록 항목을 업데이트하는 대신 완전히 새로운 시설 항목이 만들어집니다.
불분명 함. _에 대해 마음을 확인하십시오. "_ –
_"형식의 XML을 만들 것이라고 _ 또는 _하지만 원하는대로 XML 파일을 만들지는 않지만 "_ 코드 너무. –
모호한 점에 대해 사과드립니다. 내가 제거한 _ 그러나 그것은 원하는 XML 파일을 생성하지 않습니다 ._ 문. 두 번째 요청에 관해서는'prof.SomeItem = "New Value";를 변경하면 이전 값을 업데이트하고 새 값으로 바꾸는 대신 자식 항목과 함께 완전히 새로운 ''목록을 만듭니다. –
Zach