List <int>, List <decimal> 및 long에 대한 JSON 본문

케빈 크루이 센

내 API 컨트롤러 중 하나에 저장 방법과 결합 된 C # 웹 사이트 및 웹 API가 있습니다. 이 메서드는 HttpPosts 만 허용합니다. 내가 본문에 보내고 싶은 것은 List<int>, List<decimal>그리고 long.

API 컨트롤러의 HttpPost 메서드는 하나의 매개 변수 만 작동하도록 허용하므로 a JObjectstringas 매개 변수를 모두 시도했습니다 . 문자열을 사용할 때는 항상 null이고 JObject를 사용할 때는 null이 아니지만 본문에서 잘못 복사되었습니다. 이들은 null이고 잘못 복사 되었기 때문에 List<int>, List<decimal>로의 변환 long도 작동하지 않습니다.


매개 변수 (문자열) :

[HttpPost]
[AllowAnonymous]
[ActionName("save")]
public bool SaveOrders([FromBody] string jsonData)
{
    // Convert jsonData string to List<int>, List<decimal>, long
    JObject json = JObject.Parse(jsonData);
    List<int> productIds = JsonConvert.DeserializeObject(json["productIds"].ToString(), typeof(List<int>));
    List<decimal> prices = JsonConvert.DeserializeObject(json["prices"].ToString(), typeof(List<decimal>));
    long dateInTicks = JsonConvert.DeserializeObject(json["dateInTicks"].ToString(), typeof(long));

    ...
}

POST 본체 포함 :

"{
    "productIds": "[20, 25]",
    "prices": "[0.40, 7.40]",
    "dateInTicks": "1402444800"
}"

위에서 디버깅 할 때 parameter-string은 항상 null입니다.


JObject로서의 매개 변수 :

[HttpPost]
[AllowAnonymous]
[ActionName("save")]
public bool SaveOrders([FromBody] JObject jsonData)
{
    // Convert jsonData JObject to List<int>, List<decimal>, long
    dynamic json = jsonData;
    string sProductIds = (string)json["productIds"];
    string sPrices = (string)json["prices"];
    string sDateInTicks = (string)json["dateInTicks"];
    List<int> productIds = JsonConvert.DeserializeObject(sProductIds, typeof(List<int>));
    List<decimal> prices = JsonConvert.DeserializeObject(sPrices, typeof(List<decimal>));
    long dateInTicks = JsonConvert.DeserializeObject(sDateInTicks, typeof(long));

    ...
}

POST 본체 포함 :

productIds: "[20, 25]",
prices: "[0.40, 7.40]",
dateInTicks: "1402444800"

이것을 디버깅 할 때 매개 변수 -JObject는 다음과 같습니다.

{
  "productIds: \"": {
    "20, 25]\",\nprices: \"": {
      "0.40, 7.40]\",\ndateInTicks: \"1402444800\"": ""
    }
  }
}

sProductIds, sPrices 및 sDateInTicks는 null입니다.


나는 내가 어떤 일을 잘못하고 있음을 알고 있으므로이 질문은 내가 그것을 어떻게 바꾸어야할지 모르기 때문입니다.


편집 1 (Rafal의 제안) :

내 구성 파일에서 한 줄을 추가했습니다.

// Only allow JSON response format
var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
config.Formatters.Remove(config.Formatters.XmlFormatter);
// Added the following line:
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();

그리고 내 방법이 변경되었습니다.

[HttpPost]
[AllowAnonymous]
[ActionName("save")]
public bool SaveOrders([FromBody] Data jsonData)
{
    if (jsonData != null)
    {
        if (jsonData.productIds != null && jsonData.prices != null)
        {
            return SavePrices(jsonData.productIds, jsonData.prices, jsonData.dateInTicks);
        }
        else
        {
            Console.WriteLine("One of the objects is null, so we can't continue.");
            return false;
        }
    }
    else
    {
        Console.WriteLine("The send data is null, so we can't continue.");
        return false;
    }
}

public class Data
{
    public List<int> productIds { get; set; }
    public List<decimal> prices { get; set; }
    public long dateInTicks { get; set; }
}

그러나 Data-parameter는 null이 아니지만 그 안에있는 List와 long도 모두 0입니다.


편집 2 :

FireFox의 RESTClient Body 사용 :

"productIds":[20,25],"prices":[0.4,7.4],"dateInTicks":1402444800

JObject 매개 변수가 다음과 같은 이유 :

{
  "\"productIds\":": {
    "20,25],\"prices\":": {
      "0.4,7.4],\"dateInTicks\":1402444800": ""
    }
  }
}

대신 :

{
  \"productIds\":[20,25],\"prices\":[0.4,7.4],\"dateInTicks\":1402444800
}

[배열이 있는 첫 번째 항목 자동으로 제거하고 :" {"..

라팔

수업 추가 :

public class Data
{
    public List<int> productIds { get; set; }
    public List<decimal> prices { get; set; }
    public long dateToTicks { get; set; }
}

그리고 API 메서드의 서명을 변경하여 매개 변수로받습니다.

속성 이름은 파스칼 대소 문자입니다. deserializer의 기본 구성이 낙타 케이스를 허용하지 않기 때문에 의도적으로 수행했습니다. json을 처리하고 'normal'속성 대 / 소문자를 사용하려면 다음을 추가하십시오.

            config.Formatters.JsonFormatter.SerializerSettings.ContractResolver 
= new CamelCasePropertyNamesContractResolver();

사이트 구성 파일의 줄에 App_Start새 템플릿의 폴더 또는 Global.asax.cs. 구성은 유형 HttpConfiguration입니다.


추가 조사를 통해 귀하가 유효하지 않은 (json 유효성 검사기에 관한 한 유효하지 않지만 당면한 작업에 적절하지 않음) json 콘텐츠가 있다는 결론에 도달했습니다. 다음과 같이 게시하는 경우 :

{
   "productIds": [20, 25],
   "prices": [0.40, 7.40],
   "dateToTicks": "1402444800"
}

추가 따옴표가 없으면 Data 클래스로 역 직렬화됩니다. 그대로 유지해야하는 경우 줄 바꿈 따옴표를 풀면 값 목록이 아닌 3 개의 문자열 속성이있는 json 개체가있는 것처럼 수동으로 deserialize해야합니다.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Int List 구문 분석에 대한 문자열 목록

분류에서Dev

List [(java.util.UUID, String, String, String, Int, Int, Int, Int, java.sql.Timestamp)] 유형에 대한 Json deserializer가 없습니다.

분류에서Dev

지원되지 않는 피연산자 유형 'int'및 'list'에 대한 TypeError

분류에서Dev

'head'및 'tail'대신 List 'init'및 'last'에 대한 패턴 일치

분류에서Dev

If 문 오류 : ValueError : 기본 10 인 int ()에 대한 잘못된 리터럴 : ''및 순서가 잘못된 int ()

분류에서Dev

list.append 구문에 대한 혼란

분류에서Dev

변환 방법 List <KeyValuePair <string, decimal >> list = new List <KeyValuePair <string, decimal >> (); DataTable에?

분류에서Dev

'List <int>'에 'Last'에 대한 정의가 없습니다.

분류에서Dev

TypeError : + =에 대해 지원되지 않는 피연산자 유형 : 'int'및 'list'with Pygame

분류에서Dev

+ =에 대해 지원되지 않는 피연산자 유형 : 'int'및 'list'

분류에서Dev

-=에 대해 지원되지 않는 피연산자 유형 : 'list'및 'int'

분류에서Dev

>>에 대한 TypeError on float 및 int

분류에서Dev

List <int>에서 인접한 동일 / 유사 요소 찾기 (및 바꾸기)

분류에서Dev

형식 적합성 오류 : 예상 형식 List [Int]에 대한 Iterable [Int]

분류에서Dev

T 및 List [T]에 대한 유형 매개 변수 경계

분류에서Dev

std :: list에 대한 std :: prev 및 std :: next의 유효성

분류에서Dev

IEnumerable <decimal> 및 IEnumerable <decimal?> 수치를 출력하는 그룹화 된 LINQ 쿼리에 대한 계산 수행 문제

분류에서Dev

JsObject에서 Scala List [Int] 구문 분석

분류에서Dev

JSON 직렬화-int 유형에 대한 기본값 설정

분류에서Dev

bool 및 list가있는 형식 문자열에 대한 인수가 충분하지 않습니다.

분류에서Dev

파이 게임에서 나는 그 문제가 있습니다 : + =에 대해 지원되지 않는 피연산자 유형 : 'int'및 'list'

분류에서Dev

Python List Comprehension : for 및 if 문?

분류에서Dev

요청 본문 / 문자열 JSON에 대한 OWIN ApiController 액세스

분류에서Dev

영화 예약 프로그램 : TypeError :-: 'list'및 'int'에 대해 지원되지 않는 피연산자 유형

분류에서Dev

builtins.TypeError : + : 'int'및 'list'에 대해 지원되지 않는 피연산자 유형

분류에서Dev

Tkinter Trace 및 ValueError : 기본 10 인 int ()에 대한 잘못된 리터럴 : ''

분류에서Dev

Spring boot 및 @EnableAutoConfiguration에 대한 기본 질문

분류에서Dev

이메일 제목 및 본문에 대한 preg_match

분류에서Dev

How to convert List<decimal> to List<string>?

Related 관련 기사

  1. 1

    Int List 구문 분석에 대한 문자열 목록

  2. 2

    List [(java.util.UUID, String, String, String, Int, Int, Int, Int, java.sql.Timestamp)] 유형에 대한 Json deserializer가 없습니다.

  3. 3

    지원되지 않는 피연산자 유형 'int'및 'list'에 대한 TypeError

  4. 4

    'head'및 'tail'대신 List 'init'및 'last'에 대한 패턴 일치

  5. 5

    If 문 오류 : ValueError : 기본 10 인 int ()에 대한 잘못된 리터럴 : ''및 순서가 잘못된 int ()

  6. 6

    list.append 구문에 대한 혼란

  7. 7

    변환 방법 List <KeyValuePair <string, decimal >> list = new List <KeyValuePair <string, decimal >> (); DataTable에?

  8. 8

    'List <int>'에 'Last'에 대한 정의가 없습니다.

  9. 9

    TypeError : + =에 대해 지원되지 않는 피연산자 유형 : 'int'및 'list'with Pygame

  10. 10

    + =에 대해 지원되지 않는 피연산자 유형 : 'int'및 'list'

  11. 11

    -=에 대해 지원되지 않는 피연산자 유형 : 'list'및 'int'

  12. 12

    >>에 대한 TypeError on float 및 int

  13. 13

    List <int>에서 인접한 동일 / 유사 요소 찾기 (및 바꾸기)

  14. 14

    형식 적합성 오류 : 예상 형식 List [Int]에 대한 Iterable [Int]

  15. 15

    T 및 List [T]에 대한 유형 매개 변수 경계

  16. 16

    std :: list에 대한 std :: prev 및 std :: next의 유효성

  17. 17

    IEnumerable <decimal> 및 IEnumerable <decimal?> 수치를 출력하는 그룹화 된 LINQ 쿼리에 대한 계산 수행 문제

  18. 18

    JsObject에서 Scala List [Int] 구문 분석

  19. 19

    JSON 직렬화-int 유형에 대한 기본값 설정

  20. 20

    bool 및 list가있는 형식 문자열에 대한 인수가 충분하지 않습니다.

  21. 21

    파이 게임에서 나는 그 문제가 있습니다 : + =에 대해 지원되지 않는 피연산자 유형 : 'int'및 'list'

  22. 22

    Python List Comprehension : for 및 if 문?

  23. 23

    요청 본문 / 문자열 JSON에 대한 OWIN ApiController 액세스

  24. 24

    영화 예약 프로그램 : TypeError :-: 'list'및 'int'에 대해 지원되지 않는 피연산자 유형

  25. 25

    builtins.TypeError : + : 'int'및 'list'에 대해 지원되지 않는 피연산자 유형

  26. 26

    Tkinter Trace 및 ValueError : 기본 10 인 int ()에 대한 잘못된 리터럴 : ''

  27. 27

    Spring boot 및 @EnableAutoConfiguration에 대한 기본 질문

  28. 28

    이메일 제목 및 본문에 대한 preg_match

  29. 29

    How to convert List<decimal> to List<string>?

뜨겁다태그

보관