programing

에 대한 JOBject를 디시리얼화하는 방법NET 객체

mytipbox 2023. 3. 14. 21:19
반응형

에 대한 JOBject를 디시리얼화하는 방법NET 객체

저는 뉴턴소프트 JSON 라이브러리를 즐겁게 사용하고 있습니다.예를 들어, I'm create authority.JObject로부터.NET 객체(이 경우 예외 인스턴스)(서브 클래스일 수도 있고 아닐 수도 있음)

if (result is Exception)
    var jobjectInstance = JObject.FromObject(result);

라이브러리가 오브젝트에 대한 JSON 텍스트(즉 문자열)를 역직렬화할 수 있다는 것을 알게 되었습니다.

// only works for text (string)
Exception exception = JsonConvert.DeserializeObject<Exception>(jsontext); 

하지만 내가 원하는 건

// now i do already have an JObject instance
Exception exception = jobjectInstance.????

음, 내가 처음부터 할 수 있는 것은 확실하다.JObjectJSON 텍스트로 돌아가서 역직렬화 기능을 사용합니다만, 이것은 거꾸로 보입니다.

투고에 따르면, 지금은 훨씬 더 좋아졌습니다.

// pick out one album
JObject jalbum = albums[0] as JObject;

// Copy to a static Album instance
Album album = jalbum.ToObject<Album>();

문서:JSON을 유형으로 변환

이 문서에서 다음을 발견했습니다.

JObject o = new JObject(
   new JProperty("Name", "John Smith"),
   new JProperty("BirthDate", new DateTime(1983, 3, 20))
);

JsonSerializer serializer = new JsonSerializer();
Person p = (Person)serializer.Deserialize(new JTokenReader(o), typeof(Person));

Console.WriteLine(p.Name);

클래스 정의Person는 다음과 호환성이 있어야 합니다.

class Person {
    public string Name { get; internal set; }
    public DateTime BirthDate { get; internal set; }
}

최신 버전의 JSON.net 를 사용하고 있어 커스텀시리얼라이제이션이 필요 없는 경우는, 보다 간결한 Tien Do 의 회답을 참조해 주세요.

누군가 다른 방법을 찾을 경우를 대비해서 너무 늦었다.

void Main()
{
    string jsonString = @"{
  'Stores': [
    'Lambton Quay',
    'Willis Street'
  ],
  'Manufacturers': [
    {
      'Name': 'Acme Co',
      'Products': [
        {
          'Name': 'Anvil',
          'Price': 50
        }
      ]
    },
    {
      'Name': 'Contoso',
      'Products': [
        {
          'Name': 'Elbow Grease',
          'Price': 99.95
        },
        {
          'Name': 'Headlight Fluid',
          'Price': 4
        }
      ]
    }
  ]
}";

    Product product = new Product();
    //Serializing to Object
    Product obj = JObject.Parse(jsonString).SelectToken("$.Manufacturers[?(@.Name == 'Acme Co' && @.Name != 'Contoso')]").ToObject<Product>();

    Console.WriteLine(obj);
}


public class Product
{
    public string Name { get; set; }
    public decimal Price { get; set; }
}

언급URL : https://stackoverflow.com/questions/4441466/how-to-deserialize-a-jobject-to-net-object

반응형