C\#JSon 반 직렬 화 데이터 협정 형식 은 반 직렬 화 할 수 없습니다.필요 한 데이터 구성원 을 찾 지 못 했 기 때 문 입 니 다.

배경 오늘 사용:C\#JSon 직렬 화 와 역 직렬 화
역 직렬 화 할 때 아래 의 오류 메시지 가 나 타 났 다.
System.Runtime.Serialization.SerializationException:       “TestEntity”      ,            “multipleChoice, runTimeDisplayColumns”。

  System.ComponentModel.ReflectPropertyDescriptor.SetValue(Object component, Object value)

구체 적 인 원인 은 내 가 반 서열 화 된 실체 류 에 두 가지 속성 을 추가 한 것 이다.
private bool multipleChoice;
        /// <summary>
        ///           
        /// </summary>     
        [XmlIgnore]
        [Browsable(false)]
        public bool MultipleChoice
        {
            get
            {
                return multipleChoice;
            }
            set
            {
                multipleChoice = value;
            }
        }

        private string runTimeDisplayColumns;
        /// <summary>
        ///            
        /// </summary>     
        [XmlIgnore]
        [Browsable(false)]
        public string RunTimeDisplayColumns
        {
            get
            {
                return runTimeDisplayColumns;
            }
            set
            {
                runTimeDisplayColumns = value;
            }
        }

이전에 저 장 된 JSon 문자열 을 역 직렬 화 할 때 새로 추 가 된 두 개의 속성 은 대응 하 는 값 이 없어 서 위의 오 류 를 보 여 주 었 습 니 다.
해결 방법:
[DataContract]
public class TestEntity
{
		private bool multipleChoice;
        /// <summary>
        ///           
        /// </summary>     
        [XmlIgnore]
        [Browsable(false)]
		[DataMember(IsRequired = false)]
        public bool MultipleChoice
        {
            get
            {
                return multipleChoice;
            }
            set
            {
                multipleChoice = value;
            }
        }

        private string runTimeDisplayColumns;
        /// <summary>
        ///            
        /// </summary>     
        [XmlIgnore]
        [Browsable(false)]
		[DataMember(IsRequired = false)]
        public string RunTimeDisplayColumns
        {
            get
            {
                return runTimeDisplayColumns;
            }
            set
            {
                runTimeDisplayColumns = value;
            }
        }
}

DataMember(IsRequired=false)속성 을 통 해 이 속성 을 표면 에 표시 합 니 다.필요 한 것 이 아 닙 니 다.이렇게 되면 반 직렬 화 할 때 JSON 문자열 에 이 속성의 정의 가 부족 하 더 라 도 정상 적 인 반 직렬 화 를 보장 합 니 다.
주석:
속성 에 DataMember(IsRequired=false)를 추가 하면 해당 클래스 에 추가 해 야 합 니 다. [DataContract]표지.

좋은 웹페이지 즐겨찾기