c# - Serializar objeto a JToken





.net json.net (3)


Puede acceder a las propiedades llamando a Properties en JObject .

Cuando necesite agregar una propiedad, simplemente agréguela usando el constructor JProperty .

Ver la documentación de JSON.NET.

Tengo un JObject y me gustaría establecer una propiedad desde un objeto fuertemente tipado en él.

JObject["ProductionVersion"] = new ProductionVersion();

Para hacer esto, ProductVersion necesita ser convertido a un JToken. ¿Cómo puedo hacer esto sin tener que serializar y deserializar el objeto como JObject?

JObject["ProductVersion"] = JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeObject(message.ProductVersion))



Tu pregunta es un poco confusa ...

  1. ¿Entonces tienes un JObject y quieres un JToken ? Bueno, un JObject es un JToken . Eche un vistazo a la jerarquía de herencia aquí: JObject class
  2. Si lo que quieres decir es "Tengo un objeto serializable, y quiero convertirlo a un JToken sin tener que serializarlo y deserializarlo nuevamente", entonces utiliza este JToken.FromObject(obj)



Para hacer esto sin LINQ en .Net2.0:

List<Order> objListOrder = GetOrderList();
objListOrder.Sort(
    delegate(Order p1, Order p2)
    {
        return p1.OrderDate.CompareTo(p2.OrderDate);
    }
);

Si estás en .Net3.0, entonces la answer de LukeH es lo que estás buscando.

Para ordenar en múltiples propiedades, todavía puede hacerlo dentro de un delegado. Por ejemplo:

orderList.Sort(
    delegate(Order p1, Order p2)
    {
        int compareDate = p1.Date.CompareTo(p2.Date);
        if (compareDate == 0)
        {
            return p2.OrderID.CompareTo(p1.OrderID);
        }
        return compareDate;
    }
);

Esto le daría fechas ascendentes con órdenes de orden descendentes .

Sin embargo, no recomendaría pegar delegados ya que significará muchos lugares sin la reutilización del código. Debe implementar un IComparer y simplemente pasarlo a su método de Sort . Ver here

public class MyOrderingClass : IComparer<Order>
{
    public int Compare(Order x, Order y)
    {
        int compareDate = x.Date.CompareTo(y.Date);
        if (compareDate == 0)
        {
            return x.OrderID.CompareTo(y.OrderID);
        }
        return compareDate;
    }
}

Y luego, para usar esta clase de IComparer, simplemente cree una instancia y pásela a su método de clasificación:

IComparer<Order> comparer = new MyOrderingClass();
orderList.Sort(comparer);




c# .net json.net