2017-01-22 6 views
0

다음을 사용하여 Windows에서 내 등록 정보를 JSON으로 변환했는데 작동이 잘되었지만 지금은 Mac에서 Xamarin에서도 동일하게 처리하려고하지만 인식 할 수 없습니다 DataContractJsonSerializer. 아래는 내가 창문에 사용 된 코드는 다음과 같습니다Xamarin.Mac에서 DataContractJsonSerializer를 사용할 수 없습니다.

public static string JsonSerializer(T t) 
    { 
     DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T)); 
     MemoryStream ms = new MemoryStream(); 
     ser.WriteObject(ms, t); 
     string jsonString = Encoding.UTF8.GetString(ms.ToArray()); 
     ms.Close(); 
     //Replace Json Date String 
     string p = @"\\/Date\((\d+)\+\d+\)\\/"; 
     MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString); 
     Regex reg = new Regex(p); 
     jsonString = reg.Replace(jsonString, matchEvaluator); 
     return jsonString; 
    } 

수 난 내 Xamarin.Mac 프로젝트에서이를 사용할 수 있도록 해결 방법을 찾는 사람.

답변

0

직접 해결 된 문제. 나는 Json.Net을 다음과 같이 사용했다 :

//Convert "yyyy-MM-dd HH:mm:ss" String as "\/Date(1319266795390+0800)\/" 
     string p = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}"; 
     MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate); 
     Regex reg = new Regex(p); 
     jsonString = reg.Replace(jsonString, matchEvaluator); 
     DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T)); 
     Newtonsoft.Json.JsonSerializer serializer = new JsonSerializer(); 
     MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)); 
     JsonReader reader = new JsonTextReader(new StreamReader(ms)); 
     T obj2 = serializer.Deserialize<T>(reader); 
     //T obj = (T)ser.ReadObject(ms); 
     return obj2; 

결과는 동일하다.

+0

Mono는 Mono 4.6 릴리스 이후로 Microsoft의 참조 코드를 사용하기 시작했습니다. https://github.com/mono/mono/blob/mono-4.6.0-branch/mcs/class /referencesource/System.Runtime.Serialization/System/Runtime/Serialization/Json/DataContractJsonSerializer.cs Mono 설치를 4.6.x로 업그레이드하는 경우 클래스를 사용해야합니다. –

+0

nope. 아직 거기에 아무런 지원도하지 않았다. –