2013-07-17 6 views
3

나는 대부분의 아마 정말 간단 뭔가를 잊고 해요,하지만 난ServiceStack.Text 및 DeserializeFromString

내가 클래스가 무엇을 알아낼 수 없습니다 인정 : 내가 얻을 다음

public class UserAgentInfo 
{ 
    public string agent_type { get; set; } 
    public string agent_name { get; set; } 
    public string agent_version { get; set; } 

    public string os_type { get; set; } 
    public string os_name { get; set; } 
    public string os_versionName { get; set; } 
    public string os_versionNumber { get; set; } 

    public string linux_distibution { get; set; } 
} 

using (System.Net.WebClient wc = new System.Net.WebClient()) 
{ 
    string json = wc.DownloadString("http://www.useragentstring.com/?getJSON=agent_type-agent_name-agent_version-os_type-os_name-os_versionName-os_versionNumber-linux_distibution&uas=" + o.Browser); 

    agentInfo = ServiceStack.Text.TypeSerializer.DeserializeFromString<UserAgentInfo>(json); 
} 

json 문자열은 다음과 같습니다 :

,369 URL에서 JSON 문자열과로 역 직렬화 할 나는 무엇을 놓치고

{...UserAgentInfo} 
    agent_name: null 
    agent_type: null 
    agent_version: null 
    linux_distibution: null 
    os_name: null 
    os_type: null 
    os_versionName: null 
    os_versionNumber: null 

:

"{\"agent_type\":\"Browser\",\"agent_name\":\"Chrome\",\"agent_version\":\"28.0.1500.72\",\"os_type\":\"Windows\",\"os_name\":\"Windows 7\",\"os_versionName\":\"\",\"os_versionNumber\":\"\",\"linux_distibution\":\"Null\"}" 

또는 C#

"{"agent_type":"Browser","agent_name":"Chrome","agent_version":"28.0.1500.72","os_type":"Windows","os_name":"Windows 7","os_versionName":"","os_versionNumber":"","linux_distibution":"Null"}" 

에 사용하고 반환 된 객체가되지 않은 사람을위한?

+1

반환 된 문자열이 말 그대로 첫 번째와 마지막 큰 따옴표와 이스케이프 된 따옴표를 사용하여 질문에 쓰는 경우 객체가 아닌 단일 문자열로 구문 분석됩니다. '{ "agent_type": "Browser", "agent_name": "Chrome", ...}'과 같이 보일 것입니다. 'C# '의 – JimmiTh

+0

은'''과 같은 특수 문자를 포함한 문자열을 이스케이프 처리해야하므로'\ "'... – balexandre

+0

그 점 옆에 있습니다. JSON 문자열은 C#으로 작성된 문자열 리터럴이 아니며 서비스에서 반환 된 문자열입니다. 이 문자열이'''로 시작하고 끝나고 다른 모든 문자를 이스케이프하면 JSON 객체로 구문 분석되지 않고 단일 JSON 문자열로 해석됩니다. 내가 묻는 이유는 다음과 같습니다. * 문자 그대로 * 당신이 대가로 얻는 것입니까? Visual Studio 디버거가 보여주는 것만 큼? – JimmiTh

답변

4

난 당신이 JSON 문자열을 역 직렬화하려면 다음을 사용하려는 생각 :

ServiceStack.Text.JsonSerializer.DeserializeFromString<UserAgentInfo>(json) 

TypeSerializer

가 JSV 형식 ( json-csv-jsv-serializers)입니다.

+0

나는 그것을 쉽게 알 수 있었다 :) 많은 감사 :) – balexandre

+2

누군가가 * Simple API *에서 문서를 변경해야하기 때문에이 문제가 발생했다 : https://github.com/ServiceStack/ServiceStack.Text# simple-api :) – balexandre

+0

예, JSV를 발표하는 원본 블로그 게시물에서 축 어적으로 복사되지만 새로운 컨텍스트에서는 모든 serializer에 대해 * 표시됩니다. 게다가 "TypeSerializer"는 항상 혼란스럽고 일반적인 이름 선택으로 사용되었습니다 (나는 질문 코드에서 그 사실을 발견하지 못했습니다). "JsvSerializer"의 문제점은 무엇입니까? 그러나 3 년이 지난 지금, 나는 그것을 지금 바꿀 수 없다고 생각합니다. :-) – JimmiTh