2009-11-19 1 views
0

입력 배열이 바이트 A [50] 인 경우, 전 길이 42 바이트거기에 어떤 API가 문자열이나 바이트 배열을 사용자 정의 개체로 변환하는 닷넷 플랫폼에 의해 제공됩니까?

  1. 스트링 아래로 배열 세 diffrent 데이터 타입 값 뒀다

    는 (이진 변환) 길이 4 바이트

  2. 플로트와
  3. 긴 (이진수로 변환) (이진수로 변환) 4 바이트 길이

은 이제 아래

0과 같은 스키마를 정의
<schemaforparsing> 
      <field> 
       <name>fieldname1</name> 
       <type>string</type> 
       <length>42</length> 
      </field> 

     <field> 
       <name>fieldname2</name> 
       <type>long</type> 
       <length>4</length> 
     </field> 

     <field> 
       <name>fieldname3</name> 
       <type>float</type> 
       <length>4</length> 
     </field> 
    </schemaforparsing> 

이 바이트 배열을 사용자 정의 된 객체로 구문 분석하려고합니다. - 정의 객체의 클래스는 구문 분석 한 후, 다음과 같이 그러니까 기본적으로 내가 그 스키마에 스키마의 입력을 받아 기반으로하는 구성 요소를 원하는

 classGenerated 
     { 
      String fieldname1[42]; 
      long fieldname2; 
      float fiedlname3; 
     } 

될 것입니다이 경우 클래스에 지정된 schema.like에서 생성한다 배열의 바이너리 데이터는 트랜잭션 스키마와 관련된 클래스의 객체를 생성한다.

dot net 3.5 플랫폼은 이러한 구성 요소를 제공합니까?

답변

1

글쎄, 기본적으로 어떤 형태의 바이너리 직렬화를 원한다고 들린다.

일반적인 기본 제공 .NET 직렬화는 템플릿이 아닌 기존 클래스에서 작동하지만 개인적으로는별로 좋아하지 않습니다.

템플릿 생성 클래스가 필요한 경우 Protocol Buffers - 휴대용, 소형 및 직렬화/비 직렬화를 사용하는 것이 좋습니다. 두 가지 주요 C# 포트 - my ownMarc Gravell's one이 있습니다. 물론, 다른 바이너리 직렬화 형식도있다. protobuf는 내가 가장 익숙한 형식이다.

+0

사용자 정의 객체로 이진수를 비 직렬화하고 싶지 않습니다. 내 질문을 편집했습니다. 다시 검토하십시오.감사합니다 –

+0

이진 데이터가 있고 개체로 끝내고 싶습니다. "이 바이트 배열을 사용자 정의 된 객체로 구문 분석하고 싶습니다."어떤 식으로 사용자 정의 객체로 이진수를 비 직렬화하려고하지 않습니까? (바이트 배열 = 바이너리. 혼동의 원인이 될 수 있습니다.) –

1

(편집 됨) 자체 "스키마"를 사용하는 일반적인 이진 직렬화 기 외에 프레임 워크에는 이러한 구성 요소가 없습니다. 자신을 구현하는 것이 그리 어렵지 않을 수도 있습니다. 내가 스키마가 당신에게 같은 것을 알려줍니다 가정 : 문자열로 해석 될

  • 처음 42 바이트가 '를하여 FieldName1'
  • 두 번째 4 바이트가를 필드에 할당하는 분야에 할당 한 해석 할 'fieldname2'
  • ...

너무 열심히해서는 안됩니다.

+0

바이너리를 사용자 정의 된 객체로 비 직렬화하고 싶지 않습니다. 내 질문을 편집했습니다. 제발 검토해보십시오. 감사합니다. –

1

문맥이 없으면 대답하기 어려운 질문입니다. "사용자 정의"개체로 무엇을하고 싶습니까?

동적 필드를 사용하여 런타임에 개체를 만들 수 있어야하는 경우 가능한 해결책은 C# 4의 dynamic 형식이 될 때까지 기다렸다가 ExpandoObject으로 역 직렬화하는 것입니다 (ExpandoObject 참조).