나중에 검색 할 수 있도록 SQL에서 C# .NET 클래스의 인스턴스를 저장하고 싶습니다. SQL에 LINQ를 사용하여 클래스를 구성하는 모든 XML로 레코드를 추가 할 수 있습니다.XML에서 C# 클래스를 다시 작성하는 방법
이제 XML을 검색하고 클래스 객체 인스턴스를 재구성하려면 어떻게해야합니까?
나중에 검색 할 수 있도록 SQL에서 C# .NET 클래스의 인스턴스를 저장하고 싶습니다. SQL에 LINQ를 사용하여 클래스를 구성하는 모든 XML로 레코드를 추가 할 수 있습니다.XML에서 C# 클래스를 다시 작성하는 방법
이제 XML을 검색하고 클래스 객체 인스턴스를 재구성하려면 어떻게해야합니까?
XML 문자열로 객체를 직렬화 :
public static T FromXml<T>(string xml)
{
using (TextReader reader = new StringReader(xml))
{
try
{
return (T)new XmlSerializer(typeof(T)).Deserialize(reader);
}
catch (InvalidOperationException)
{
// string passed is not XML, return default
return default(T);
}
}
}
위대한 답변 제시. 이것에 대한 귀하의 도움에 감사드립니다! – mcass20
@ mcass20, 대단히 반갑습니다. 항상 코드와 기술을 공유하는 즐거움. –
xml serialization 및 deserialization을 권하고 싶습니다.
이Person donald = new Person{
ID=1,
FirstName="Donald",
LastName="Duck",
DateOfBirth=new DateTime(1950,1,1)};
//create a xml serializer with the required type
XmlSerializer xs=new XmlSerializer(typeof(Person));
//open a stream to the file, and save the instance
TextWriter tw = new StreamWriter(@"C:\donald.xml");
xs.Serialize(tw, donald);
tw.Close();
//open a reader stream to the file, and just load the instance.
TextReader tr = new StreamReader(@"C:\donald.xml");
Person donald2 = (Person) xs.Deserialize(tr);
tr.Close();
경고 : :이 만 공용 속성/필드를 저장
는 Person 클래스가 정의 내가 한 경우로
public class Person
{
public int ID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfBirth { get; set; }
}
는 XML에서로드 /을 저장은 간단합니다 XML 요소로서의 클래스. 생성 된 XML에 대한 추가 제어를 수행하려면 System.Xml.Serialization 네임 스페이스 (XmlAttributeAttribute가 개인적으로 가장 좋아하는 속성)의 특성을 살펴보십시오.
-1'StreamReader' 주위에서'using' 블록을 사용하지 않기 때문에 -1입니다. –
글쎄, 나는 명시 적으로 독자/작가를 닫고있다. using 블록 안에 변수를 선언 할 때'using'을 사용하는 것이 싫어서 의도적이다. 코드를 읽기 쉽게 만든다. – SWeko
XStream을 사용하여 개체를 XML로 저장할 수 있습니다. 꽤 사용하기 쉽습니다.
다른 사람이 말할 때, 직렬화가 트릭을 할,하지만 포매터를 알고있을 것입니다 :
public static string ToXml<T>(T obj)
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
using (Stream stream = new MemoryStream())
using (XmlWriter writer = XmlWriter.Create(stream, settings))
{
new XmlSerializer(obj.GetType()).Serialize(writer, obj);
writer.Flush();
stream.Flush();
stream.Position = 0;
using (TextReader reader = new StreamReader(stream))
{
return reader.ReadToEnd();
}
}
}
객체로 XML 문자열을 역 직렬화/시리얼, 그렇지 않으면이 :
<?xml version="1.0" encoding="utf-8" ?>
이 직렬화에 포함됩니다. 가능한 경우 DataContractSerializer를 사용하십시오.
무엇이든하기 전에 이것을 .NET XML Serialization without <?xml> text declaration으로 보시기 바랍니다.
HTH
클래스 또는 인스턴스에 대해 이야기하고 있습니까? – mathk