2017-09-06 1 views
2

대량의 주문 데이터를 문자열 배열로 반환하는 API를 사용하고 있습니다.C# 속성 이름이없는 JSON 배열을 객체로 구문 분석

"orders": [ 
    //[ price, size, order_id ] 
    [ "295.96","0.05088265","3b0f1225-7f84-490b-a29f-0faef9de823a" ], 
    ... 
] 

나는 다음과 같은 형식의 객체에 구문 분석 Json.Net를 사용해야합니다 :

public class Order 
{ 
    public decimal price { get; set; } 
    public decimal size { get; set; } 
    public Guid order_id { get; set; } 
} 

내가 어떻게 이것을 달성 할 수 있습니까? 어떻게 문자열 형식의 배열 orders 단일 끝나는 그래서 개체를 deserialize Json.NET 사용하는 방법을 알고 있지만 건너 뛸 수있는 방법이 있습니다 및 대신 그냥 개체 인스턴스에 대신 직접 매핑 할? 나는 그것을 직렬화하는 방법을 발견 한

Expecting object or array, not string.[Code 1, Structure 1]

그러나 :

+0

당신이 당신의 클래스의 속성에 데이터를 매핑 할 수있는 속성이 없기 때문에 자신 만의 변환기를 작성해야 할 수도 있습니다. 순서가 항상 동일하다는 것을 안다면, 각 값을 직접 할당 할 수 있습니다. 자세한 내용은 아래의 답변을 참조하십시오. https://stackoverflow.com/a/8031283/3492988 – mdon88

+0

*로 무엇을 의미하는지 확신 할 수 없습니다. 대신 객체 인스턴스에 직접 매핑하십시오. * - that은 .net json이 수행하는 것과 정확히 같습니다. 'var orders = JsonConvert.Deserialize > (jsonString)'은 당신을 위해 생성 된 Order "인스턴스"콜렉션을 리턴합니다. – Jaya

+0

[C# JSON.NET - 비정상적인 데이터 구조를 사용하는 응답의 비 직렬화] (https://stackoverflow.com/q/39461518/3744182)의'ObjectToArrayConverter '을 사용하여 해당 JSON을 비 직렬화 할 수 있습니다. 사실,이 질문은 그것과 중복 될 수 있습니다. 동의하다? – dbc

답변

0

내가 다음과 같은 오류가 here을 구문 분석 할 때, 당신의 문자열이 유효한 JSON 아닌 것 같다. 나는 우리가 JArray로 분석하고 "orders": 텍스트 제거 할 수 있습니다, 당신의 JSON 배열 것을 볼 : 그래서, 지금

JsonConvert.DeserializeObject<JArray>(json.Replace("\"orders\":", string.Empty)); 

을, 우리는 배열을 가지고 있지만 나는 Order 또는 List<Order> 형식으로 명시 적 캐스트를 할 수 없습니다 생각 여기

List<Order> orders = new List<Order>(); 

foreach (var item in arrayListed) 
{ 
    Order order = new Order(); 
    order.price = (decimal)item[0]; 
    order.size = (decimal)item[1]; 
    order.order_id = (Guid)item[2]; 
    orders.Add(order); 
} 

demostration과 그 결과입니다 : 대답은 우리가 JArray을 반복 할 필요가 있다는 것입니다.