【问题标题】:Not able to parse the object in C# .NET无法解析 C# .NET 中的对象
【发布时间】:2023-02-05 17:00:20
【问题描述】:

我无法在 C# .NET 中解析以下对象。我收到解析对象错误。

messageBody(字符串格式——我在字符串格式下得到这个对象)

{
  "Type" : "Nti_1",
  "MessageId" : "c1b7cd5b-3099-532e-9539-91376eea607b",
  "SequenceNumber" : "10000000000000128000",
  "TopicArn" : "arn:aws:sns:us-east-1:xxxxxxx:Project1-SNS.fifo",
  "Message" : "{'Prop1':'202020','Prop2':'Hi-I again reached','Prop3':'Testing String'}",
  "Timestamp" : "2023-02-05T07:35:15.905Z",
  "UnsubscribeURL" : "https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:xxxxxx:PushNotification-SNS.fifo:08d0fac2-ac0f-4ff9-b583-61024a98672d",
  "MessageAttributes" : {
    "EventType" : {"Type":"String.Array","Value":"["SMS","ArialRoot"]"}
  }
}

下面是为解析上述对象而创建的类

public class ParentObject
{
    public string Type { get; set; }
    public string MessageId { get; set; }
    public string SequenceNumber { get; set; }

    public string TopicArn { get; set; }

    public ChildObject Message { get; set; }
    public string Timestamp { get; set; }

    public string UnsubscribeURL { get; set; }

    public string MessageAttributes { get; set; }
}


public class ChildObject
{
    public string Prop1 { get; set; }
    public string Prop2 { get; set; }
    public string Prop3 { get; set; }
}

下面是我试图解析对象的代码

ParentObject obj = JsonConvert.DeserializeObject<ParentObject>(messageBody)

我不知道我缺少什么来将字符串解析为上面指定的对象。

【问题讨论】:

  • 确切的错误信息是什么?
  • Message 是您的类型中的一个对象,在您的 JSON 中是一个字符串。而MessageAttributes反过来。
  • "Value":"["SMS","ArialRoot"]" 甚至不是有效的 JSON
  • 另外,如果我没记错的话,单引号在 json 中是无效的(正如您在 message 字段的内容中所具有的那样。

标签: c# asp.net json object


【解决方案1】:

您需要创建一个与 JSON 结构匹配的 C# 类

using Newtonsoft.Json;

public class MyClass
{
    public string Type { get; set; }
    public string MessageId { get; set; }
    public string SequenceNumber { get; set; }
    public string TopicArn { get; set; }
    public string Message { get; set; }
    public string Timestamp { get; set; }
    public string UnsubscribeURL { get; set; }
    public MessageAttributes MessageAttributes { get; set; }
}

public class MessageAttributes
{
    public EventType EventType { get; set; }
}

public class EventType
{
    public string Type { get; set; }
    public string Value { get; set; }
}

反序列化 JSON 字符串

MyClass obj = JsonConvert.DeserializeObject<MyClass>(json);

【讨论】:

    【解决方案2】:

    MessageAttributes 是 .net 类型中的字符串和 json 中的对象。

    【讨论】:

      【解决方案3】:

      尝试这个,

      var parent = JsonConvert.DeserializeObject<ParentObject>(messageBody);
      var child = JsonConvert.DeserializeObject<ChildObject>(parent.Message);
      parent.Message = child;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-14
        • 1970-01-01
        • 2013-04-23
        • 2015-01-25
        相关资源
        最近更新 更多