>  기사  >  백엔드 개발  >  필요한 데이터 멤버를 찾을 수 없기 때문에 C# Json 역직렬화 데이터 계약 유형을 역직렬화할 수 없습니다.

필요한 데이터 멤버를 찾을 수 없기 때문에 C# Json 역직렬화 데이터 계약 유형을 역직렬화할 수 없습니다.

黄舟
黄舟원래의
2017-02-15 11:37:221471검색

오늘의 배경: C# Json 직렬화 및 역직렬화

역직렬화 다음과 같은 오류 메시지가 나타났습니다.

System.Runtime.Serialization.SerializationException: 数据协定类型“TestEntity”无法反序列化,因为未找到必需的数据成员“multipleChoice, runTimeDisplayColumns”。

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


구체적인 이유는 다음과 같습니다. 역직렬화된 엔터티 클래스 Two에 새 항목을 추가했습니다. 속성:

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] 마크를 추가해야 합니다.


위 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요. ! 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 주목해주세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.