무엇 대부분의 유연한 직렬화를 위해.NET 개체이기 때문에,아직 구현하는 간단하다?

StackOverflow https://stackoverflow.com/questions/106599

문제

나는 직렬화하고 직렬화 개체에 대해 걱정할 필요없이 전체 클래스는 그래프입니다.

유연성이 핵심입니다.하고 싶 할 모든 객체를 직렬화 전달하는 나 없이 완벽한 특성을 전반에 걸쳐 필요한 전체 개체 그래프.

는 것을 의미하는 바이너리 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,비록 그것의 가독성은 의심스럽습니다.

우리는 같은 요구 사항은 당신을 선택한 이 솔루션입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top