무엇 대부분의 유연한 직렬화를 위해.NET 개체이기 때문에,아직 구현하는 간단하다?
-
01-07-2019 - |
문제
나는 직렬화하고 직렬화 개체에 대해 걱정할 필요없이 전체 클래스는 그래프입니다.
유연성이 핵심입니다.하고 싶 할 모든 객체를 직렬화 전달하는 나 없이 완벽한 특성을 전반에 걸쳐 필요한 전체 개체 그래프.
는 것을 의미하는 바이너리 Serialization 옵션이 없으로만 작동 니다.NET 플랫폼입니다.나 또한 무언가를 읽을 수 있는 사람이며,따라서 해독에 의해 관리 프로그램과 다른 통역관이었습니다.
내가 찾았을 사용하여 문제를 DataContract,JSON 및 XML Serializer.
- 이러한 대부분의 오류를 보 센터 주변의 직렬화 목록/전(예: XML Serializable 일반 사전).
- 추가"어떤 유형을 알려지지 않을 정적으로 목록 잘 알려진 유형을 위한 를 들어,사용 KnownTypeAttribute 특성 또는 를 추가하 목록 전달된 형식 되며 데이터 계약으로 매핑됩."
시의 기초에 대한 답변을 실제 경험과하지 않는 이론이나 읽어의 문서입니다.
해결책
이 있으로 간주를 직렬화하 JSON 으로 대신 XML?
Json.NET 는 정말 강력하고 유연한 serializer 는 아무런 문제가 없으로 해시 테이블/일반 사전 필요 없는 특정 특성이 있습니다.나는 알기 때문에 나는 그것을 썼다:)
그것은 당신에게 당신의 힙 제어를 통해 다양한 옵션에 serializer 할 수 있습을 재정의하는 방법을 입력 직렬화를 만들어 JsonConverter 습니다.
내 생각에 JSON 은 더 인간적이 읽을 수 있는 것보다 XML 고 Json.NET 제공하는 옵션을 쓰는 형식을 유지 JSON.
마지막으로 프로젝트는 오픈 소스할 수 있도록 단계로 코드를 수정해야 하는 경우.
다른 팁
면 기억이 나요 그것은 작품이 같은 속성:
[XmlArray("Foo")]
[XmlArrayItem("Bar")]
public List<BarClass> FooBars
{ get; set; }
면 직렬화 이것은 당신을 얻을 것 같은 것:
<Foo>
<Bar />
<Bar />
</Foo>
물론,주인공을 연기하는 전문가들입니다.여기에서 더 많은 정보를 원하 MS: http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlarrayitemattribute.aspx
알려주는 경우 밖으로 작동합니다.
에서 당신의 요구 사항을 이 같은 소리 Xml Serialization 최고입니다.
어떤 종류의 문제가 있으로 컬렉션을 때 serialize?만약 당신이 언급하지 않는 것을 알고 특성에 사용하는 목록 또는 이와 유사한할 수 있습도 XmlArray 특성에 제공합니다.할 수 있는 확실히 직렬화할 수 있습니다.
이 IntermediateSerializer 에 XNA 프레임워크가 굉장히 멋진 있습니다.무리를 찾을 수 있습의 튜토리얼에 그것을 사용하기에 http://blogs.msdn.com/shawnhar
비누 Serialization 잘 나를 위해 심지어 한 개체를 사용하여 표시되어 있지 않습니다[Serializable]
당신은 문제가 있으로 컬렉션 직렬화하면 객체에서 컬렉션을 포함하는 모든 대한 참조 다른 물체에 동일한 컬렉션입니다.모든 유형의 듀얼-가리키는 존재,당신은 결국 만들기 multi-지도할 수 없는 직렬화할 수 있습니다.에 모든 문제에 나는 지금까지 했던 serialize 사용자 정의 컬렉션,그것은 항상 때문에 일부 기능을 추가하는 내가 필요로 하는 고의 일환으로"전형적인"클라이언트-서버 응용 프로그램,그리고 다음을 비참하게 실패의 일환으로 소비자-공급자-서버 응용 프로그램입니다.
모든 클래스는 당신이 원하는 직렬화하여 별도의 어셈블리로,다음 사용으로 청구서를 생성하는 도구는 직렬화하면 어셈블리를 직렬화하 XML.XML 을 사용을 제어하는 특성 serialization.
필요하신 경우에는 사용자 정의 직렬화 어셈블리(그리고 당신 이 하는 것이 필요합 클래스를 지원하지 않는 IXmlSerializable 및 클래스가 포함된 추상적인 노드),다음 지시으로 청구서를 덤프하는 소스 코드는 별도의 파일에 추가하는 솔루션을 제공합니다.그런 다음 이를 수정할 수 있습으로 필요합니다.
http://msdn.microsoft.com/en-us/library/bk3w6240(VS.80).aspx
FWIW,나는 관리되는 직렬화하여 전체 AdsML Framework(400 개 이상 클래스)를 사용하여 이 기법입니다.그것을 필요로 한 많은 설명서 사용자 정의하지만,없을 받고 그 주위에 당신의 크기를 고려합니다.(내가 사용하는 별도의 도구에서 이동하 XSD C#)
동의 DataContract-기반으로 직렬화 방법(JSON 으로,XML 등)는 조금 더 복잡한 보다 나 같습니다.
하려는 경우를 얻을 JSON 확인 http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx
그것은 부품의 MS AJAX 확장.틀림없이 그것은 것으로 표시되는 사용되지 않습니다.NET3.5 지만 ScottGu 언급에서 자신의 블로그에 여기에 코멘트(http://weblogs.asp.net/scottgu/archive/2007/10/01/tip-trick-building-a-tojson-extension-method-using-net-3-5.aspx#4301973 는)왜 그런지고 그것이 있어야 지원이 있습니다.
가장 간단한 것입니다 마크의 객체를 직렬화 특성과를 사용한 바이너리 포맷을 처리하 serialization.전체 클래스는 그래프 문제가 안 된다는 포함된 모든 물체는 또한 표시로 직렬화.
아마도 더 효율적으로 직렬화를 사용하여 BinaryFormatter
로에서 복사 http://blog.paranoidferret.com/index.php/2007/04/27/csharp-tutorial-serialize-objects-to-a-file/
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
public class Serializer
{
public Serializer()
{
}
public void SerializeObject(string filename,
ObjectToSerialize objectToSerialize)
{
Stream stream = File.Open(filename, FileMode.Create);
BinaryFormatter bFormatter = new BinaryFormatter();
bFormatter.Serialize(stream, objectToSerialize);
stream.Close();
}
public ObjectToSerialize DeSerializeObject(string filename)
{
ObjectToSerialize objectToSerialize;
Stream stream = File.Open(filename, FileMode.Open);
BinaryFormatter bFormatter = new BinaryFormatter();
objectToSerialize =
(ObjectToSerialize)bFormatter.Deserialize(stream);
stream.Close();
return objectToSerialize;
}
}
에 대한 상호 운용성을 우리는 항상 사용 Xml 바코드 표시든지 우리의 클래스 설계되었다 지상에서 그것을 할습니다.
우리가 만들 XSD 스키마는 문서를 생성 설정에서 클래스를 사용하는 것 XSD.exe.이를 생성하는 부분 클래스는 그래서 우리는 그의 집합을 만들이 해당 부분은 클래스에 추가 방법을 우리는 우리를 돕고 싶다면 채우는 클래스들을 사용하여 응용 프로그램에서는(그들에 초점을 맞추어를 추가하고 deserialising 및 비 difficut 입을 사용할 때).
을 사용해야 합니다 NetDataContractSerializer.그것은 모든 종류의 개체 그래프 및 지원하 제네릭,목록,다형성기(KnownType 특성이 필요하지 않습 여기서),재귀와 등등.유일한 단점은 당신을 당신의 클래스로[Serializable]/[DataContract]특성,경험에 당신이 해야 할 일종의 매뉴얼 fine-tuning 어쨌든 이후 모든 구성원이어야 유지됩니다.또한 직렬화를 Xml,비록 그것의 가독성은 의심스럽습니다.
우리는 같은 요구 사항은 당신을 선택한 이 솔루션입니다.