将对象序列化为 URL 参数字符串 - 包括嵌套对象的属性 [英] Serialise an object to URL parameter string - Including properties from nested objects

查看:58
本文介绍了将对象序列化为 URL 参数字符串 - 包括嵌套对象的属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个类,其中包含一个类型为另一个类的属性.例如:

I have a class which contains a property who's type is another class. For example:

public class Outer
{
    public string SomeStringProperty { get; set; }
    public Inner SomeClassProperty { get; set; }
}

public class Inner
{
    public string InnerProperty1 { get; set; }
    public string InnerProperty2 { get; set; }
}

我想将 Outer 类的实例转换为 URL 查询字符串,并包含嵌套的 Inner 类中的属性.

I want to convert an instance of the Outer class to a URL query string, and include the properties from the nested Inner class.

例如给定一个Outer的实例,如:

For example, given an instance of Outer, such as:

Outer toSerialise = new Outer 
{
    SomeStringProperty = "MyOuterValue",
    SomeClassProperty = new Inner
    {
        InnerProperty1 = "MyInnerValue1",
        InnerProperty2 = "MyInnerValue2"
    }
};

我想把它转换成一个字符串:

I want to convert this to a string of:

&SomeStringProperty=MyOuterValue&InnerProperty1=MyInnerValue1&InnerProperty2=MyInnerValue2

&SomeStringProperty=MyOuterValue&InnerProperty1=MyInnerValue1&InnerProperty2=MyInnerValue2

我怎样才能做到这一点?

How can I achieve this?

我找到了类似问题的答案,但它们似乎不支持嵌套类.

I've found answers to similar questions, however they don't seem to support nested classes.

可能的答案 1可能的答案 2

推荐答案

我们在 Oauth2 中回调 url 的客户端状态有同样的问题,因为回调 url 有 & &也是

We had same problem with callback url's client state in Oauth2 because callback urls have ampersand & too

http://.......?param=123&param2=456&state=?id=1&name=test

我们只是将回调 url 转换为 Base64 编码的字符串并在服务本身解码.

We just converted callback url to Base64 encoded string and decoded at service itself.

http://.......?param=123&param2=456&state=P2lkPTEmbmFtZT10ZXN0

修复:

  1. 将您的类实例编码为 json
  2. 将 json 编码为 base64string
  3. 将 url 中的 base64string 作为数据参数发送
  4. 解码 base64 并将 json 映射到您的 api 模型中.

JSON:

 { "menu": {
  "id": "file",
  "value": "File",
  "popup": {
    "menuitem": [
      {"value": "New", "onclick": "CreateNewDoc()"},
      {"value": "Open", "onclick": "OpenDoc()"},
      {"value": "Close", "onclick": "CloseDoc()"}
    ]
  }
}}

Base64:

<代码> eyJtZW51IjogewogICJpZCI6ICJmaWxlIiwKICAidmFsdWUiOiAiRmlsZSIsCiAgInBvcHVwIjogewogICAgIm1lbnVpdGVtIjogWwogICAgICB7InZhbHVlIjogIk5ldyIsICJvbmNsaWNrIjogIkNyZWF0ZU5ld0RvYygpIn0sCiAgICAgIHsidmFsdWUiOiAiT3BlbiIsICJvbmNsaWNrIjogIk9wZW5Eb2MoKSJ9LAogICAgICB7InZhbHVlIjogIkNsb3NlIiwgIm9uY2xpY2siOiAiQ2xvc2VEb2MoKSJ9CiAgICBdCiAgfQp9fQ ==

网址:

<代码>&安培;数据= eyJtZW51IjogewogICJpZCI6ICJmaWxlIiwKICAidmFsdWUiOiAiRmlsZSIsCiAgInBvcHVwIjogewogICAgIm1lbnVpdGVtIjogWwogICAgICB7InZhbHVlIjogIk5ldyIsICJvbmNsaWNrIjogIkNyZWF0ZU5ld0RvYygpIn0sCiAgICAgIHsidmFsdWUiOiAiT3BlbiIsICJvbmNsaWNrIjogIk9wZW5Eb2MoKSJ9LAogICAgICB7InZhbHVlIjogIkNsb3NlIiwgIm9uY2xpY2siOiAiQ2xvc2VEb2MoKSJ9CiAgICBdCiAgfQp9fQ ==

替代:

如果你必须使用这种查询格式,那么你也可以使用委托类型

If you must use this query format then you can also use delegate types

Outer toSerialise = new Outer 
{
    SomeStringProperty = "MyOuterValue",
    SomeClassProperty = new Inner
    {
        InnerProperty1 = "MyInnerValue1",
        InnerProperty2 = "MyInnerValue2"
    }
};

var queryObject = new { toSerialise.SomeStringProperty, toSerialise .Inner.InnerProperty1, toSerialise.Inner.InnerProperty2 }

这篇关于将对象序列化为 URL 参数字符串 - 包括嵌套对象的属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆