JSON 反序列化器不适用于嵌套对象

问题描述 投票:0回答:1

我有一个应用程序,可以序列化对象并发送 JSON 字符串值,如下所示。

public class Rootobject
{
    public int MessageState { get; set; }
    public object Message { get; set; }
    public object HeaderId { get; set; } 
}

public class Message
{
    public string FName { get; set; }
    public string LName { get; set; }
    public string Address { get; set; }       
}

Rootobject ro = new Rootobject();
ro.HeaderId = "HID";
ro.MessageState = 0;
ro.Message = new Message() { FName = "john", LName = "Doe", Address = "123456" };

string x = JsonConvert.SerializeObject(ro);

x
值被发送到另一个应用程序,并按如下方式反序列化。

public class Rootobject1
{
    public int MessageState { get; set; }
    public object Message { get; set; }
    public object HeaderId { get; set; }
}

public class Message1
{
    public string FName { get; set; }
    public string LName { get; set; }
    public string Address { get; set; }
}

var y = JsonConvert.DeserializeObject<Rootobject1>(receivedMsg);

这里的嵌套对象没有被反序列化,只是一个

JObject

如何反序列化嵌套对象?请帮忙。

谢谢。

c# json json.net json-deserialization
1个回答
1
投票

我不明白将

Message
中的
Rootobject1
属性定义为
object
类型的原因,因为您知道数据结构。

解决此问题的快速方法是使用

Message
类型定义
Message1

public class Rootobject1
{
    public int MessageState { get; set; }
    public Message1 Message { get; set; }
    public object HeaderId { get; set; }
}

或者,您也可以将

JObject
转换为
Message1
类型。

var message = ((JObject)y.Message).ToObject<Message1>();
© www.soinside.com 2019 - 2024. All rights reserved.