DataContractJsonSerializer를 사용하여 날짜 및 시간 속성을 포함하는 JSON 문자열을 직렬화하는 방법은 무엇입니까?

Mahyar Mottaghi Zadeh

JSON 객체를 [문자열로] 사용자 지정 클래스로 직렬화하려고합니다. Newtonsoft.Json 또는 Json.NET과 같은 타사 패키지를 사용하지 않지만 DataContractJsonSerializer 를 활용하려고했습니다 . JSON 개체에는 "yyyy-MM-dd HH : mm : ss"에서 제공되는 DateTime 속성이 포함되어 있으며 직렬화와 관련하여 아래의 예상이 발생합니다.

JSON에 필요한대로 DateTime 콘텐츠 '2020-05-29 09:05:39'유형의 개체를 '\ / Date ('로 시작하고 ') \ /'로 끝나는 개체를 역 직렬화하는 동안 오류가 발생했습니다.

중요 : 이 문제는 NewtonSoft 패키지와 JsonConvert.DeserializeObject에 JsonSerializerSettings를 추가하여 해결됩니다. 최종 제품은 COM 개체이므로 최종 대상 dll에는 종속 DLL이 없어야합니다.

아래에서 기술적 세부 사항을 찾을 수 있습니다.

JSON 객체는 다음과 같습니다.

{
  ...,
  "export_time": "2020-05-29 09:05:39",
  "app_version": "1.1.0",
  "allowed_mac_addresses": [
    "XX-XX-XX-XX-XX-XX"
  ],
  "signature": ""
}

대상 클래스 :

[DataContract]
public class MainFractionatorConfigFile
{
    [DataMember]
    internal string[] allowed_mac_addresses;

    [DataMember]
    internal DateTime export_time;

    [DataMember]
    internal string app_version;

    [DataMember]
    internal string signature;
}

직렬 변환기 방법은 다음과 같습니다.

public static MainFractionatorConfigFile ReadMainFractionatorConfigFile(string json)
{
    var deserializedUser = new MainFractionatorConfigFile();
    var ms = new MemoryStream(Encoding.UTF8.GetBytes(json));
    var ser = new DataContractJsonSerializer(deserializedUser.GetType());
    deserializedUser = ser.ReadObject(ms) as MainFractionatorConfigFile;
    ms.Close();
    return deserializedUser;
}

시도 1 : 솔루션 과 같은 커뮤니티의 다른 제안 있지만 참조 할 다른 패키지를 요구합니다.

시도 2 는 DataContractJsonSerializer에 DateTimeDataContractSurrogate를 추가하려고 시도 했지만 실패했습니다.

요약하면 아래 코드에 대한 대체 방법을 찾고 있습니다.

 var mainFObj = JsonConvert.DeserializeObject<MainFractionatorConfigFile>(myJson, new JsonSerializerSettings
                {
                    DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
                });

어떤 도움이나 아이디어라도 감사하겠습니다.

Amir Jelo |

타사 NuGet 패키지 추가에 대한 제약이있는 경우 Github에서 패키지 (예 : Newtonsoft.JSON)를 복제 / 다운로드하여 프로젝트에 직접 추가하지 않는 것이 좋습니다. 따라서 배포 (bin 폴더)에 타사 dll이 없습니다.

Newtonsoft.JSON의 최신 버전은 .netcore로 구현되며 프로젝트가 .net 프레임 워크 4에있는 동안 호환되는 버전을 다운로드해야합니다. 태그를 사용하여 다운로드 할 최상의 버전을 찾을 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관