JavaScriptConverter을 만들어야합니다.
JavaScriptConverter 클래스는 기본적으로 JavaScriptSerializer 클래스에서 지원 없는 관리 유형에 대한 직렬화 및 역 직렬화 프로세스를 구현할 수 있습니다.
둥지 때문에 가장 간단하지 않지만 원유를 두드리고 성공적으로 Linqpad에서 테스트했습니다.
public class ResultConverter : JavaScriptConverter
{
private static readonly IEnumerable<Type> supportedTypes = new List<Type> { typeof(Warnings) };
public override IEnumerable<Type> SupportedTypes => supportedTypes;
public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
{
var warningsDictionary = dictionary["warnings"] as IDictionary<string, object>;
var loginDictionary = warningsDictionary["login"] as IDictionary<string, object>;
var login = new Login
{
Result = loginDictionary["result"] as string,
Details = loginDictionary["*"] as string,
};
return new Warnings { Login = login };
}
public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
throw new NotImplementedException();
}
}
지원 클래스와 사용법 :
void Main()
{
string json = @"{ ""warnings"": { ""login"": { result: ""OK"", ""*"": ""blah blah blah"" } } }";
var js = new JavaScriptSerializer();
js.RegisterConverters(new List<JavaScriptConverter> { new ResultConverter() });
var result = js.Deserialize<Warnings>(json);
Console.WriteLine(result);
}
public class Login
{
public string Result { get; set; }
public string Details { get; set; }
}
public class Warnings
{
public Login Login { get; set; }
}
우리의 출력에서 우리가 지금 Details
속성에 "ㅋ ㅋ ㅋ ㅋ ㅋ ㅋ"가 관련 부분은 여기에 우리의 Deserialize()
의 구현입니다.
실제로'result' 키는 실제 파일에서 따옴표가 누락 되었습니까? 아니면 질문의 예에서 오타였습니까? –
아, 그냥 오타였습니다. 유감입니다. 실제로 결과 필드가 전혀 없습니다 ... 나는 방금 문자열 객체를 추가 한 다른 필드의 예제로 추가했습니다. –